WEBVTT

00:00.000 --> 00:14.000
What's cool to see some references to what we're doing already and the power of open source

00:14.000 --> 00:20.000
so that's really cool to be in a very collaborative room.

00:20.000 --> 00:27.000
So we're trying to build like a modern blockbase editing experience for the open web.

00:27.000 --> 00:30.000
So quick run through.

00:30.000 --> 00:36.000
I want to share like okay what we've been up to past year mostly and look a little bit

00:36.000 --> 00:38.000
forward to next year.

00:38.000 --> 00:40.000
First a little bit of an introduction to block now.

00:40.000 --> 00:45.000
We'll do a quick demo to show you how it works for those not familiar with it.

00:45.000 --> 00:56.000
We'll show what we've done mostly in 2025 and kind of like our ideas of okay what's ahead.

00:56.000 --> 00:59.000
So for those who are not familiar.

00:59.000 --> 01:05.000
Here's like a quick 10 second overview of what you can do with our editor.

01:05.000 --> 01:07.000
So it's up.

01:07.000 --> 01:13.000
We started building this a couple of years ago when we did an editor like this for ourselves

01:13.000 --> 01:17.000
that we noticed okay this is actually a lot more work than expected.

01:17.000 --> 01:24.000
It was hoping there'd be something existing that we could really easily reuse.

01:24.000 --> 01:29.000
And though there was great low level open source libraries it was still a lot of work

01:29.000 --> 01:34.000
to build something with a good UX and a good developer experience on top of it.

01:34.000 --> 01:40.000
So we started with block now and the idea is okay we have a good UX included.

01:40.000 --> 01:47.000
So notion style blockbase UX including all the UI components that you might need.

01:48.000 --> 01:57.000
Is your APIs so no low level position juggling for those who are familiar with lower level text editors.

01:57.000 --> 02:05.000
Blockbase design and internally we're proud to build really on some high quality open source libraries like pros mirror for

02:05.000 --> 02:15.000
managing the DOM content editable and YJS to power collaboration with CRDTs.

02:15.000 --> 02:21.000
We started kind of spitting out of a research project sponsored by AnnelNet.

02:21.000 --> 02:24.000
And then the last one and a half years.

02:24.000 --> 02:29.000
So Alex mentioned it and I think Bill and also mentioned it.

02:29.000 --> 02:37.000
We've been really proud to unfortunate to collaborate with Zemdus and Dinem from France.

02:37.000 --> 02:44.000
They're building a, they reached out one a half year ago like hey we're building last week ducks in our collaboration,

02:44.000 --> 02:50.000
which is like a notion style collaboration documents collaboration products.

02:50.000 --> 02:53.000
And we're using block for not for it. It works great.

02:53.000 --> 02:55.000
Can we help you take it to the next level?

02:55.000 --> 03:05.000
We also need this and this and this. So that's also really accelerated our product and organization last year.

03:05.000 --> 03:08.000
Besides that, we're also supported by industry.

03:08.000 --> 03:12.000
So now you see more and more sponsors of the last year.

03:12.000 --> 03:19.000
I think 2025 for us was really a year where we went from something that started as a side project to a small team.

03:19.000 --> 03:29.000
So it's like four of us now with a mix of different sponsorship models.

03:29.000 --> 03:33.000
One thing that's core to block now is blocks.

03:33.000 --> 03:39.000
Nothing to do with block chain but about the cool little pieces in the editor just picked out here.

03:39.000 --> 03:42.000
Why blocks and why this kind of editor?

03:42.000 --> 03:47.000
If you look at different formats existing, so let's position yourself a little bit like what we're trying to be.

03:47.000 --> 03:53.000
We're not like a pure markdown editor. It's a little bit too limited if you want advanced formatting or colors or something like that.

03:53.000 --> 03:57.000
That's not easily possible with simple markdown editor.

03:57.000 --> 04:06.000
And we also definitely don't want to be a word style editor because all of us have seen these kind of like word documents.

04:06.000 --> 04:14.000
That have a super inconsistent layout and design because you can change the font here and everything there.

04:14.000 --> 04:21.000
And so you kind of end up with a little bit of a messy thing. So that's also not our goal.

04:21.000 --> 04:26.000
What we want to do is have a better UX and for us the blocks are the answer to this.

04:26.000 --> 04:32.000
So it helps blocks help users to create structured content naturally.

04:32.000 --> 04:37.000
And yeah, we call that prioritizing content over form.

04:37.000 --> 04:40.000
So you end up with nice and structured documents.

04:40.000 --> 04:44.000
And this same principle also really helps in the developer experience.

04:44.000 --> 04:49.000
So because everything is a block you can easily address it by an ID.

04:49.000 --> 04:57.000
You have a clear schema of what kind of blocks are allowed in the document and it makes it easier to work with as a developer.

04:58.000 --> 05:07.000
On to Nick for a quick demo about that and I'll need to try to hold this with you.

05:07.000 --> 05:09.000
Okay.

05:09.000 --> 05:18.000
Yeah, so what I want to go over here is a little bit about how you actually use block now in terms of the API and such.

05:18.000 --> 05:25.000
So over the past year we've put a lot of effort into the ability to customize the editor.

05:25.000 --> 05:36.000
So you'll see here that I have a very simple document editor so you can see that there's a bunch of elements that you can add to the editor.

05:36.000 --> 05:42.000
So all of these are blocks that are available by default and built into the system.

05:42.000 --> 05:49.000
And on the left hand side you can see all of the code that it actually took to get that to happen.

05:49.000 --> 05:54.000
So what we're really trying to go for here is a really easy to use out of the box experience.

05:54.000 --> 06:03.000
Whereas many other lower level editors tend to force you to build out all of this content.

06:03.000 --> 06:08.000
Yourself rather than it being provided by default.

06:08.000 --> 06:15.000
But what we've done on top of this is, well actually I should go over the code a little bit.

06:15.000 --> 06:21.000
So you'll see here that we block notice based on we're using React as the framework.

06:21.000 --> 06:25.000
And you'll see that there's this used create block note.

06:25.000 --> 06:32.000
Hook that actually gives us an editor instance and then we can render it out.

06:32.000 --> 06:40.000
So what I'm going to show here is actually adding to the schema.

06:40.000 --> 06:50.000
So what you'll see here is that we can extend and add additional features into the editor by extending its schema.

06:50.000 --> 06:55.000
So you can choose what blocks you actually want inside of your editor.

06:55.000 --> 07:05.000
So what I've done here is created a very simple alert block, which we've we've spent over the past year.

07:05.000 --> 07:15.000
One of the major refactors that we've done is worked on the actual API for defining these custom blocks and adding them into the editor.

07:16.000 --> 07:23.000
So block note in general we heavily focus on type safety structure schema.

07:23.000 --> 07:30.000
Like that's kind of our whole bit is that everything in the editor it's content is completely type safe.

07:30.000 --> 07:35.000
It's always valid content.

07:35.000 --> 07:44.000
So what you'll see here is that there is this configuration that describes what an alert block has as.

07:44.000 --> 07:53.000
So it's the blocks type so it's an alert block and the properties that it's available to have.

07:53.000 --> 07:59.000
So this is defining a way that it can be validated at runtime.

07:59.000 --> 08:04.000
And the content that the actual alert block supports.

08:04.000 --> 08:10.000
So in this case it's it's allowed to have content inside of it.

08:10.000 --> 08:25.000
So you'll see that there's a very simple function for describing how to map that block, which is just a json object at this point and how to map that into something that actually renders into the editor.

08:25.000 --> 08:35.000
So what we can do here is go ahead and actually add that block to the editor.

08:36.000 --> 08:42.000
So again, very simple example so you can actually see how it actually renders out.

08:42.000 --> 08:51.000
So you'll see here that we have defined this severity property for the alert block.

08:51.000 --> 08:56.000
And defined that it should change its background color based on that severity.

08:56.000 --> 09:08.000
And I had added a button that actually will insert that new element, the new block into the editor.

09:08.000 --> 09:15.000
So what I would really like to stress here and show off is that everything is type safe.

09:15.000 --> 09:21.000
So you can see that the actual properties of the alert block are being validated.

09:22.000 --> 09:27.000
So you can actually also see the different types of blocks.

09:27.000 --> 09:36.000
Since we've extended the block note schema here, there was a number of blocks that were already built into the editor.

09:36.000 --> 09:41.000
And so we were just adding on the alert block to the list essentially.

09:41.000 --> 09:48.000
So you can see that there's a number of other.

09:48.000 --> 09:58.000
You see that there's a list of all the blocks that are available in the editor and all of this is defined in a type safe way.

09:58.000 --> 10:03.000
So yeah, I think that's the majority of what I wanted to show off.

10:03.000 --> 10:17.000
We spent a good amount of time over the year to work and refine the API for defining these blocks and allowing for more customization into the editor.

10:18.000 --> 10:19.000
Yeah.

10:25.000 --> 10:30.000
Nice and I think it was important to keep in mind with this.

10:30.000 --> 10:33.000
So thanks for the demo. It's like okay because we're.

10:33.000 --> 10:35.000
Thank you.

10:35.000 --> 10:38.000
Because it's an editable service right.

10:38.000 --> 10:42.000
It's a little bit different than when you're just making a web app.

10:42.000 --> 10:45.000
So having this type safety.

10:46.000 --> 10:48.000
How are you doing?

10:48.000 --> 10:49.000
Yeah.

10:49.000 --> 10:51.000
Okay.

10:51.000 --> 10:53.000
Cool.

10:53.000 --> 10:56.000
Because an editor is a dynamic service.

10:56.000 --> 10:59.000
So these kind of things are a little bit more complex.

10:59.000 --> 11:03.000
And when you're building a regular app so hard.

11:03.000 --> 11:06.000
So looking back at 20 25.

11:06.000 --> 11:11.000
So what we've been focusing on and some key numbers again.

11:11.000 --> 11:15.000
Yeah, I think a project is really taking off now and that's cool to see.

11:15.000 --> 11:17.000
And I think you can see it in these numbers.

11:17.000 --> 11:19.000
So we've done over 60 releases.

11:19.000 --> 11:24.000
Lots of PRs and we've grown from I think it was like 30k.

11:24.000 --> 11:25.000
This is like mpm downloads, right?

11:25.000 --> 11:27.000
It's the best set that we have.

11:27.000 --> 11:32.000
But the question marks, but at least it was like 30,000 about a year ago.

11:32.000 --> 11:37.000
And now we're like 120 or 130,000 weekly downloads.

11:37.000 --> 11:40.000
It's really nice to see the adoption.

11:40.000 --> 11:46.000
And apparently that to see our project really resonates with the community.

11:46.000 --> 11:48.000
Yep.

11:48.000 --> 11:49.000
We worked on many different things.

11:49.000 --> 11:54.000
So definitely a lot of features going from export system.

11:54.000 --> 11:57.000
I'll go over some of these in a bit.

11:57.000 --> 12:00.000
A lot of like API enhancements.

12:00.000 --> 12:06.000
But I'm even even more proud that we were also able to also really invest in the core.

12:07.000 --> 12:09.000
That has been around for a couple of years.

12:09.000 --> 12:12.000
But you really make sure that the core is also sustainable.

12:12.000 --> 12:15.000
And you're being able to re-factor parts of this.

12:15.000 --> 12:19.000
So for example, this custom block API that Nick just showed,

12:19.000 --> 12:23.000
like with which you can make your own alert block in the demo.

12:23.000 --> 12:28.000
Last year we migrated all our default blocks to actually also use the external API.

12:28.000 --> 12:31.000
First version of our AI integration and it's been designed.

12:31.000 --> 12:37.000
So you can have an agent understand the documents and then hand in hand with an AI.

12:37.000 --> 12:39.000
You can understand the documents.

12:39.000 --> 12:40.000
So you can ask questions.

12:40.000 --> 12:42.000
You can redact the documents.

12:42.000 --> 12:45.000
So ask it to make changes or write new content.

12:45.000 --> 12:46.000
Hand in hand.

12:46.000 --> 12:48.000
And you can really integrate this.

12:48.000 --> 12:50.000
Of course with your own language model.

12:50.000 --> 12:56.000
So you're not bound to any surface or whatsoever that we build.

12:56.000 --> 12:59.000
And it's done in a way.

12:59.000 --> 13:01.000
Yeah, what we call like human in the loop.

13:01.000 --> 13:04.000
So the AI, you really see it writing as a collaborator.

13:04.000 --> 13:07.000
You can accept and reject changes.

13:07.000 --> 13:10.000
So the end user is still in control.

13:10.000 --> 13:14.000
It's not like some random robots taking control of your document.

13:14.000 --> 13:17.000
Here's a more advanced demo.

13:17.000 --> 13:19.000
Some of this is still to come.

13:19.000 --> 13:22.000
But most of it is available already.

13:22.000 --> 13:24.000
So here's a template document.

13:25.000 --> 13:30.000
And now I demonstrate that it's also possible to connect certain tools.

13:30.000 --> 13:33.000
So look up some information about the European Union.

13:33.000 --> 13:37.000
It does a web search on the back end with an AI tool.

13:37.000 --> 13:40.000
And now you see it making those suggestions in the document.

13:40.000 --> 13:41.000
I can review them.

13:41.000 --> 13:46.000
And as a user I can say, OK, accept these changes and then they become part of the document.

13:46.000 --> 13:51.000
So connecting a web search might be one thing that you like.

13:51.000 --> 14:00.000
But maybe you want to connect like a rag system or your own database or have it look up something about your colleagues or about other documents that you've written earlier.

14:00.000 --> 14:06.000
You can make all these integrations yourself.

14:06.000 --> 14:07.000
Yes.

14:07.000 --> 14:09.000
Suggestions and versioning.

14:09.000 --> 14:11.000
I'm really looking forward to this.

14:11.000 --> 14:13.000
This is something that we expect.

14:13.000 --> 14:20.000
We've done a prototype on this last November and December in close collaboration with Kevin Yans.

14:20.000 --> 14:24.000
From the YGS project.

14:24.000 --> 14:28.000
This was sponsored by Deanum and Zendis.

14:28.000 --> 14:32.000
And so this is about what we call asynchronous collaboration.

14:32.000 --> 14:35.000
So making different versions.

14:35.000 --> 14:40.000
I think I'm in front of the screen.

14:40.000 --> 14:47.000
See being able to see and they've changes between versions.

14:48.000 --> 14:50.000
And also to go into suggested mode.

14:50.000 --> 14:53.000
So what you might know as track changes suggestions.

14:53.000 --> 14:58.000
You can maybe have a user that doesn't have permissions for the base documents.

14:58.000 --> 15:07.000
But once you suggest some changes and then the owner of the document can accept or reject those changes.

15:07.000 --> 15:10.000
And we want to as part of that.

15:10.000 --> 15:14.000
We also want to make a possible so that you can store metadata.

15:14.000 --> 15:16.000
Keep in the version history.

15:16.000 --> 15:20.000
Keep a complete overview of who they want and when.

15:20.000 --> 15:23.000
So we call that attributions.

15:23.000 --> 15:26.000
That's going to be.

15:26.000 --> 15:28.000
Let me quickly see.

15:28.000 --> 15:32.000
We're hosting a local first dev room tomorrow.

15:32.000 --> 15:35.000
And it's going to be a presentation about the technical stuff behind that.

15:35.000 --> 15:39.000
And a little bit of sneak peek of what's upcoming and also what's coming in the new version of

15:39.000 --> 15:49.000
BIGS to enable all this.

15:49.000 --> 15:50.000
Yeah.

15:50.000 --> 15:53.000
Some other things that are ahead of us.

15:53.000 --> 15:55.000
So I mentioned a sync collaboration.

15:55.000 --> 16:01.000
Of course there are some features that we have to remind that we would love to work on.

16:01.000 --> 16:06.000
We also want to keep working on some of the foundations like we have done last year.

16:06.000 --> 16:08.000
We've always things to improve there.

16:08.000 --> 16:12.000
Well, I think this was illustrated very clearly by us in the last talk.

16:12.000 --> 16:15.000
So we don't want to lose a side of that.

16:15.000 --> 16:20.000
And I think also as our project might mature as we have more people working on it.

16:20.000 --> 16:22.000
As we have more people depending on it.

16:22.000 --> 16:24.000
I think actually there's also.

16:24.000 --> 16:29.000
We want to spend more time looking at the overall ecosystem around blocknotes.

16:29.000 --> 16:33.000
So that means okay, how can we be transparent in terms of our roadmap?

16:33.000 --> 16:35.000
How do we govern the project?

16:35.000 --> 16:39.000
But also thinking more about things like extension systems.

16:39.000 --> 16:41.000
Can we make that even easier?

16:41.000 --> 16:44.000
We've done some investments in the extension API last year.

16:44.000 --> 16:46.000
But can we make this even easier?

16:46.000 --> 16:52.000
Maybe like extension gallery where the community can create and share extensions, etc.

16:52.000 --> 17:02.000
But also think about other interoperability related features like standardization of these kind of documents.

17:03.000 --> 17:13.000
Yeah, and really look beyond just the editor or just the new features, but really at blocknotes as a project.

17:13.000 --> 17:14.000
Thanks.

17:20.000 --> 17:23.000
There's seven minutes for questions.

17:24.000 --> 17:36.000
We use YGS CRDT for powering the collaborative features.

17:36.000 --> 17:42.000
Basically we think like YGS is kind of like a industry standard for this.

17:42.000 --> 17:49.000
We also directly work with Kevin for this kind of more advanced features.

17:49.000 --> 17:51.000
We always keep an eye on different things.

17:51.000 --> 17:56.000
So tomorrow on the local first demo, I think there might be a session related to Loro as well.

17:56.000 --> 18:01.000
But really it is like okay we're pretty into YGS at this moment.

18:01.000 --> 18:04.000
So I've done haven't done like an advanced comparison.

18:04.000 --> 18:06.000
I'd make might be more into this topic.

18:06.000 --> 18:09.000
But maybe that's more on the side.

18:09.000 --> 18:10.000
Yeah.

18:14.000 --> 18:15.000
Yes?

18:16.000 --> 18:21.000
I worked in the company, which was using the solution.

18:21.000 --> 18:24.000
For me, because how do you read about them?

18:24.000 --> 18:28.000
And I don't really speak about 80 things in the community.

18:28.000 --> 18:31.000
And now I'm going to move to another company.

18:31.000 --> 18:36.000
I don't know what they have, but I have to suggest them.

18:36.000 --> 18:39.000
Would my life be there?

18:40.000 --> 18:41.000
Nice. Thanks for your questions.

18:41.000 --> 18:45.000
The question is, was difficult for you.

18:45.000 --> 18:50.000
I expect for accessibility reasons to work in a notion that the previous company that you worked,

18:50.000 --> 18:55.000
and would your life be better working in block-not.

18:55.000 --> 19:00.000
It's a little bit challenging to say because the notion is like an end user application,

19:00.000 --> 19:02.000
and we are just like an editing service.

19:02.000 --> 19:05.000
So also very much depends on the editor around it.

19:05.000 --> 19:13.000
We've done some sprints on accessibility, and we expect also a collaboration with some of the sponsors

19:13.000 --> 19:18.000
to do larger sprints on top of accessibility this year.

19:18.000 --> 19:22.000
So I can't guarantee you that as of this moment,

19:22.000 --> 19:29.000
but I will be really happy if the end of this year,

19:29.000 --> 19:32.000
I can say with 100% confidence.

19:32.000 --> 19:35.000
So let us give a try to accomplish it.

19:37.000 --> 19:39.000
Will I?

19:39.000 --> 19:46.000
Yes. So I already said that we are using block-not-not-not-appal project

19:46.000 --> 19:51.000
and of course we extended this schema to have links to work packages,

19:51.000 --> 19:52.000
which are my entities in our project.

19:52.000 --> 19:55.000
But I don't know the good ideas that I have in a year.

19:55.000 --> 19:59.000
Like, how my schema should actually should've looked at it like in the beginning.

19:59.000 --> 20:06.000
in the beginning. So my question is, in your example, you had an alert with, I think, like,

20:06.000 --> 20:18.000
for a very used, let's say we replace Aera by Adal. Adal. And we want to migrate, let's say,

20:18.000 --> 20:24.000
100,000 documents, change that. Is there any concepts how we can do this? Like, oh, yeah,

20:24.000 --> 20:31.000
we can prove that, make this structure. So the question is, okay, how to deal with

20:31.000 --> 20:38.000
migrations of the schema. So let's say you support the specific kinds of blocks.

20:38.000 --> 20:45.000
And let's say you change the severity that make them out from Aera to Fatal. I'll skip

20:45.000 --> 20:51.000
the Spanish part. How do you go about that? I think that's a good question.

20:51.000 --> 20:58.000
There is, as in most migrations, this is, I would say this is similar to most migrations.

20:58.000 --> 21:07.000
So at this moment, you have multiple options. Like, either make your new application

21:07.000 --> 21:13.000
compatible with both formats. Then on the clients, you can choose to either upgrade it

21:13.000 --> 21:26.000
to show the same interface when it's Aera or Fatal. Or you find a way to migrate your data.

21:26.000 --> 21:33.000
I know there has been quite some research in systems that kind of like keep migrations

21:33.000 --> 21:40.000
in the clients and automatically try to upgrade things. I know that are currently

21:40.000 --> 21:46.000
react. So most of the UI components are based on react. So we keep the option open for the future,

21:46.000 --> 21:48.000
but I don't see it happen this year.

21:48.000 --> 21:53.000
I have a follow-up on this in Crystal, the project from Twiki, the audio.js.

21:53.000 --> 21:59.000
And so we have plenty of modules that we don't specifically to allow the integration of blocks.

21:59.000 --> 22:07.000
So we have plenty of modules that we also submit to the modules of blocks.

22:07.000 --> 22:13.000
And I have a follow-up to the map also. In Tenzu, we use block-plat and we are in Angular.

22:13.000 --> 22:18.000
And so, if you want, for example, of block-plat working in Angular, and I should focus on this

