# Nuclino - A lightweight real-time wiki built on top of ProseMirror

**URL:** <https://discuss.prosemirror.net/t/nuclino-a-lightweight-real-time-wiki-built-on-top-of-prosemirror/146>\
**Category:** Show\
**Created:** [January 26, 2016, 3:02pm UTC](https://discuss.prosemirror.net/t/nuclino-a-lightweight-real-time-wiki-built-on-top-of-prosemirror/146 "2016-01-26T15:02:03Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![kiejo](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/kiejo/32/64_2.png) [@kiejo](https://discuss.prosemirror.net/u/kiejo)\
**Post date:** [January 26, 2016, 3:02pm UTC](https://discuss.prosemirror.net/t/nuclino-a-lightweight-real-time-wiki-built-on-top-of-prosemirror/146/1 "2016-01-26T15:02:03Z")

</div>

Hey there, over the past few months me and my team have been working on Nuclino, a lightweight real-time wiki for teams. The whole editor experience is built on top of ProseMirror, which is why I’m happy to share it here! It’s still a preview release, but we’ve been testing it with a few teams and it’s been working nicely so far. We’d be happy to get more feedback, so check it out if you’re interested.

Here’s a short video tour of the main features: [https://www.youtube.com/watch?v=3cJLyeVYvPw](https://www.youtube.com/watch?v=3cJLyeVYvPw) You can sign up for free on our website [https://www.nuclino.com](https://www.nuclino.com)

Would be awesome to get your feedback!

---

<div class="post-metadata">

**Author:** ![yoshokatana](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/yoshokatana/32/72_2.png) [@yoshokatana](https://discuss.prosemirror.net/u/yoshokatana)\
**Post date:** [February 8, 2016, 7:48pm UTC](https://discuss.prosemirror.net/t/nuclino-a-lightweight-real-time-wiki-built-on-top-of-prosemirror/146/2 "2016-02-08T19:48:10Z")

</div>

Wow, this is super cool! I like that the number of commands is short, but useful. The keyboard shortcut info is handy but unintrusive, too.

---

<div class="post-metadata">

**Author:** ![marijn](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/marijn/32/15_2.png) [@marijn](https://discuss.prosemirror.net/u/marijn)\
**Post date:** [February 9, 2016, 8:38pm UTC](https://discuss.prosemirror.net/t/nuclino-a-lightweight-real-time-wiki-built-on-top-of-prosemirror/146/3 "2016-02-09T20:38:10Z")

</div>

Impressive! And nice to see what kind of unanticipated things people are managing to build on top of ProseMirror.

---

<div class="post-metadata">

**Author:** ![kzap](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/kzap/32/419_2.png) [@kzap](https://discuss.prosemirror.net/u/kzap)\
**Post date:** [August 26, 2016, 8:42pm UTC](https://discuss.prosemirror.net/t/nuclino-a-lightweight-real-time-wiki-built-on-top-of-prosemirror/146/4 "2016-08-26T20:42:51Z")

</div>

Did you use any MediaWiki or Twiki parser, I’d be interested in the Prosemirror seralizers/deserializers 🙂

---

<div class="post-metadata">

**Author:** ![kiejo](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/kiejo/32/64_2.png) [@kiejo](https://discuss.prosemirror.net/u/kiejo)\
**Post date:** [August 29, 2016, 7:35am UTC](https://discuss.prosemirror.net/t/nuclino-a-lightweight-real-time-wiki-built-on-top-of-prosemirror/146/5 "2016-08-29T07:35:30Z")

</div>

> [@kzap](#):
>
> Did you use any MediaWiki or Twiki parser, I’d be interested in the Prosemirror seralizers/deserializers 🙂

Most wikis provide a way to export a static website, which is what we use to convert existing content to the ProseMirror document model (using the HTML parser). We are currently doing this for DokuWiki and Confluence content, which works well. We implemented some preprocessing which modifies some of the HTML produced from those wikis (e.g. clean up whitespace, convert todo lists, etc.) using the [cheerio library](https://github.com/cheeriojs/cheerio).

---

<div class="post-metadata">

**Author:** ![Joshfindit](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/joshfindit/32/235_2.png) [@Joshfindit](https://discuss.prosemirror.net/u/Joshfindit)\
**Post date:** [September 23, 2016, 1:44pm UTC](https://discuss.prosemirror.net/t/nuclino-a-lightweight-real-time-wiki-built-on-top-of-prosemirror/146/6 "2016-09-23T13:44:34Z")

</div>

Instantly impressed. I’ve been putting in some time over the last year and a half to think about the next generation of semantically-connected discussions and knowledge stores.

Here are some ideas that might be of interest:

- On the back-end, break down the text in to separately-stored sections, connected to the main document
  - This frees ideas, quotes, and snippets from being locked in a single document

- Make relationships a first-class citizen
- As we enter the semantic web, there’s going to be more and more ability to see the connections between different solutions (for example knowledge that experts have internalized so deeply, that they don’t even notice it any more), and it’s going to be powerful to have tools that speak this natively.

Feel free to reach out - I like Nuclino’s style and vision.

---

<div class="post-metadata">

**Author:** ![kiejo](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/kiejo/32/64_2.png) [@kiejo](https://discuss.prosemirror.net/u/kiejo)\
**Post date:** [September 24, 2016, 9:37am UTC](https://discuss.prosemirror.net/t/nuclino-a-lightweight-real-time-wiki-built-on-top-of-prosemirror/146/7 "2016-09-24T09:37:56Z")

</div>

Thanks for the ideas and input!

> [@Joshfindit](#):
>
> On the back-end, break down the text in to separately-stored sections, connected to the main document

It’s interesting that you mention this approach as I’ve been thinking about something similar a few months ago! I haven’t had the time to explore this in more detail yet, but I think it’s a promising approach, which could enable new use cases 🙂

> [@Joshfindit](#):
>
> Make relationships a first-class citizen

I fully agree, it’s definitely something we want to achieve with Nuclino. One of the challenges is to expose this in a way which is easy to understand especially for non-techie users.

> [@Joshfindit](#):
>
> Feel free to reach out - I like Nuclino’s style and vision.

Awesome, happy to hear that!

---

<div class="post-metadata">

**Author:** ![Joshfindit](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/joshfindit/32/235_2.png) [@Joshfindit](https://discuss.prosemirror.net/u/Joshfindit)\
**Post date:** [September 24, 2016, 1:46pm UTC](https://discuss.prosemirror.net/t/nuclino-a-lightweight-real-time-wiki-built-on-top-of-prosemirror/146/8 "2016-09-24T13:46:55Z")

</div>

> [@kiejo](#):
>
> > [@Joshfindit](#):
> >
> > On the back-end, break down the text in to separately-stored sections, connected to the main document
> 
> It’s interesting that you mention this approach as I’ve been thinking about something similar a few months ago! I haven’t had the time to explore this in more detail yet, but I think it’s a promising approach, which could enable new use cases 🙂

Here are some thinking points;

- Since traversal is essentially free In a graph database, two approaches came up as viable: sentence/paragraph as a node, and word/letter as a node. in the sentence/paragraph model, a document can simply be a linked list of sentence/paragraphs, while letter as a node is a little trickier with start and end nodes fluidly linked through the chain.
- As ideas and text become “free” of “documents”, a lot of interesting possibilities immediately open up, such as being able to easily quote content just by connecting the quote to the current document, or being able to create a new version of a document by not just copy/pasting, but literally using the unchanged content from the previous version.
- In the future semantic web, text snippets could easily be shared and linked back by using the existing relationships to send out standards-compliant metadata ( such as [Cards markup | Docs | Twitter Developer Platform](https://dev.twitter.com/cards/markup) and [http://ogp.me](http://ogp.me) )

> [@kiejo](#):
>
> > [@Joshfindit](#):
> >
> > Make relationships a first-class citizen
> 
> I fully agree, it’s definitely something we want to achieve with Nuclino. One of the challenges is to expose this in a way which is easy to understand especially for non-techie users.

Agreed; this is something I hadn’t quite tackled myself. I’m leaning towards visually representing the relationships (we’re using a graph database on the back-end), but it’s only visually simple if there are less than 10 relationships shown.

---

<div class="post-metadata">

**Author:** ![kiejo](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/kiejo/32/64_2.png) [@kiejo](https://discuss.prosemirror.net/u/kiejo)\
**Post date:** [September 26, 2016, 9:52am UTC](https://discuss.prosemirror.net/t/nuclino-a-lightweight-real-time-wiki-built-on-top-of-prosemirror/146/9 "2016-09-26T09:52:39Z")

</div>

> [@Joshfindit](#):
>
> sentence/paragraph as a node, and word/letter as a node. in the sentence/paragraph model, a document can simply be a linked list of sentence/paragraphs, while letter as a node is a little trickier with start and end nodes fluidly linked through the chain.

I haven’t thought it through, but I would probably tend towards a “paragraph as node” approach as being able to build relationships between letters is not that useful and would be harder to implement. Especially when you start thinking about real-time collaborative editing it might become unnecessarily complex.

> [@Joshfindit](#):
>
> As ideas and text become “free” of “documents”, a lot of interesting possibilities immediately open up, such as being able to easily quote content just by connecting the quote to the current document, or being able to create a new version of a document by not just copy/pasting, but literally using the unchanged content from the previous version.

I like this idea in general, but I think one important aspect which makes this really hard to realize from a UX perspective is versioning. Quoting a paragraph just by reference would always show the latest version of the paragraph. What happens when the paragraph is edited or deleted? There are quite some challenges in handling these cases where different versions of the same snippets exist in different places.

> [@Joshfindit](#):
>
> In the future semantic web, text snippets could easily be shared and linked back by using the existing relationships to send out standards-compliant metadata ( such as [Cards markup | Docs | Twitter Developer Platform](https://dev.twitter.com/cards/markup) and [http://ogp.me](http://ogp.me) )

Interesting idea, thanks for the links!

> [@Joshfindit](#):
>
> I’m leaning towards visually representing the relationships (we’re using a graph database on the back-end), but it’s only visually simple if there are less than 10 relationships shown.

I experimented a little with different visualizations and came to the same conclusion. As the number of nodes and relationships grow it gets messy really fast. Aggregating the data in an intelligent way could be one way to deal with this.

What’s the project you’re working on and which graph database are you using? Sounds interesting!

---

<div class="post-metadata">

**Author:** ![lessless](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/lessless/32/154_2.png) [@lessless](https://discuss.prosemirror.net/u/lessless)\
**Post date:** [December 5, 2016, 6:39am UTC](https://discuss.prosemirror.net/t/nuclino-a-lightweight-real-time-wiki-built-on-top-of-prosemirror/146/10 "2016-12-05T06:39:29Z")

</div>

We are looking for a Hackpad substitution since its acquisition by Dropbox and I want to vouch for a “comments” feature, which gave us a dramatical collaboration performance boost. It’s really helpful to be able to easily discuss hard technical problems as a part of the document.

---

<div class="post-metadata">

**Author:** ![bjoernm](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/bjoernm/32/258_2.png) [@bjoernm](https://discuss.prosemirror.net/u/bjoernm)\
**Post date:** [December 5, 2016, 1:40pm UTC](https://discuss.prosemirror.net/t/nuclino-a-lightweight-real-time-wiki-built-on-top-of-prosemirror/146/11 "2016-12-05T13:40:43Z")

</div>

Thanks for the feedback! I’m part of the Nuclino team and we’re considering to add a comments feature. Currently, we are evaluating 3 approaches. It would be great if you could tell me your preference especially since you used Hackpad before.

1. Inline comments for a range of content like a sentence (Google Docs)
2. Comments on the whole page (Blog)
3. Inline “code” like comments (Hackpad)

---

<div class="post-metadata">

**Author:** ![Julian123](https://discuss.prosemirror.net/letter_avatar_proxy/v4/letter/j/eada6e/32.png) [@Julian123](https://discuss.prosemirror.net/u/Julian123)\
**Post date:** [July 3, 2019, 1:05pm UTC](https://discuss.prosemirror.net/t/nuclino-a-lightweight-real-time-wiki-built-on-top-of-prosemirror/146/12 "2019-07-03T13:05:02Z")

</div>

@kiejo hi, The YouTube link don’t work. can you share the code with us?

---

<div class="post-metadata">

**Author:** ![kiejo](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/kiejo/32/64_2.png) [@kiejo](https://discuss.prosemirror.net/u/kiejo)\
**Post date:** [July 4, 2019, 10:08am UTC](https://discuss.prosemirror.net/t/nuclino-a-lightweight-real-time-wiki-built-on-top-of-prosemirror/146/13 "2019-07-04T10:08:03Z")

</div>

Hi Julian,

this was a very old video of the product, which is why the link does not work anymore. In case you’re interested, this is an up-to-date video of the product: [https://www.youtube.com/watch?v=wvL2SFjpoVo](https://www.youtube.com/watch?v=wvL2SFjpoVo)

I’m afraid I can’t share any code since Nuclino isn’t open source.

---

<div class="post-metadata">

**Author:** ![zib](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/zib/32/986_2.png) [@zib](https://discuss.prosemirror.net/u/zib)\
**Post date:** [July 14, 2019, 9:13am UTC](https://discuss.prosemirror.net/t/nuclino-a-lightweight-real-time-wiki-built-on-top-of-prosemirror/146/14 "2019-07-14T09:13:01Z")

</div>

Thank you. It’s really impressive. Inspirations are even more valuable than the code itself.
