Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Nulis – Open Source Tree Editor for Writers (github.com)
231 points by rayalez on Sept 15, 2017 | hide | past | web | favorite | 83 comments

It is a shame more people aren't aware of Leo (http://leoeditor.com/).

Leo is a hierarchical editor with a tree view of nodes, which can be in Markdown, ReST, code, and create compound docs a la literate programming from nodes, etc.

The killer feature imo is nodes can be cloned to multiple places in the tree. So you could have, for example, group notes by project in one master last, plus another sub-tree for clones from the master list of your own current projects.

Leo's web site may look clunky and old-fashioned. But don't let that put you off!

-- EDIT --

For what it's worth, I do oscillate between Leo and Emacs org-mode. I'd probably stay 100% with org-mode if there were a way to clone nodes. Does anyone know if this is possible?

> org-mode if there were a way to clone nodes.

I believe that what you are explaining is essentially the equivalent to a symbolic/hard link.

As far as I know, one of the goals of org-mode is to have a format that does not diverge from pain text.

Similar to markdown, an org-mode file is always completely readable as pain text, whether using emacs it not.

That means the only way to have an updated "copy" (reference) of a tree would be to automatically copy any changes made to every copy of that tree. That would either require some sort of run-time mark (that would disappear as soon as you kill the buffer), or special syntax.

As far as I know, org-mode does not have such a feature.

A simple org-copy-subtree (C-c C-x M-w) and then paste (C-y) would do it. Or did you mean something else?


From http://leoeditor.com/tutorial-pim.html, it looks like a 'clone' means that the node is presented in several places in the document, but each of those several places bring you back to one, single node.

It seems like org-mode ought to be able to do this, too.

At least, it's weird that emacs/vim _can't_ do something. I can't remember the last time anyone said that about, well, anything :)

A clone is not a copy. When you clone a node in leo, the same node can appear in multiple places at once. If you edit any of the clones, the original is updated.

One use case: You're trying to fix a big in code. You can create a new node and place under it clones of all relevant code (which may exist across multiple files) for the bug. And not just code but also collateral for tests (e.g. unit test or input files that reproduce the bug etc). Oh and might as well clone the bug report as well.

So all that you need to work with the bug conveniently under one node. Just edit there and all relevant files get updated.

Leo is powerful and has a decent user base. It is the closest thing I've found to Emacs in the Python world. Unfortunately the documentation is really bad and I just don't have time to learn it without good documentation. I toyes with the idea of becoming a master at it just so I can write proper docs but life is too short.

With all respect, leo looks like it is an editor from the 90's with its windows 95-looks. For me, that's mostly a sign that the developers do not adhere to modern development standards. As such, why would I invest time in using a dying product/project?

With all respect, a lot of design has devolved, and was actually better in the nineties. In my humble and absolutely personal opinion this goes for software UIs, and for cars (exteriors, not technology). Leo is fine. Atom is not (to name a random example, whre not even the technology holds up).

No, I wasn't even young in the nineties. Just youngerish.

It took me maybe 30 seconds of clicking to get to this: https://github.com/leo-editor/leo-editor/graphs/contributors

Doesn't look very dead to me.

You're just making assumptions. Why does a UI have to be trendy to be good? Seems like a big leap to get from the UI to the development method to the health of the project.

By that same logic, Vim and Emacs are even more dead than Leo, which they most certainly are not.

Ehh, they actually are very well refined interfaces. True they are text oriented, but that ages well I think.

I'm not trying to imply Leo doesn't have polish, just that native UIs age poorly compared to, say, readline/curses interfaces. The expectations are completely different, and UIs have changed a lot in 20+ years.

That's not far from the truth. Leo has a horrible broken codebase and the devs are not the most competent around. The project is a prime example of everything bad going in software-development.

But, while lacking, they have the right spirit and are constantly trying to do better. If someone can adapt to the myriad of quirks and failures, it can be a very powerful tool. As an outliner it's definitly better than org-mode. But it might be good to have profund python-knowledge to take advantage of the scripting-ability to make it really useful.

Fun fact. Nulis means zero (0) in Lithuanian. I wonder what other product names unintentionally hit some word in some exotic language. One from top of my head was https://en.wikipedia.org/wiki/Mazda_Laputa (we know what "la puta" means in Spanish)

The canonical example is the Mitsubishi Pajero, later renamed Montero in a lot of Spanish-speaking countries.

I was going to say that the canonical example is the Chevy Nova ("no go") but TIL that that never actually happened. It was a made up story.

That Mitsubishi one is hilarious.

for those that don't speak Spanish, it literally means 'wanker'

Why did they choose that word? Did it have a meaning in another language besides Spanish or did they just like the sound?

Edit: found my own answer on Wikipedia, it's the latin taxonomy word for a feline:

> It was named after Leopardus pajeros, the Pampas cat, which is native to the Patagonia plateau region of southern Argentina.[3] But pajero in Spanish is also a common term of abuse, usually translated as "wanker" or "tosser", thus perhaps why alternative names have been used for many markets. It is known as the Mitsubishi Montero (meaning "mountain hunter"[4]) in the Americas (except Brazil and Jamaica), and Spain, while in the United Kingdom it is known as the Mitsubishi Shogun. https://www.wikiwand.com/en/Mitsubishi_Pajero

I actually wrote a quick web app [1] to translate a word from a ton of languages into english (so writers could see if their "made up" words would have any meaning to any demographic), but it could be used here by just putting your product/brand name in. (Please note it's actually hitting Google Translate 50 times since they don't have bulk translate, so results may take a second.)

Fun fact: Nullis seems to mean zero in Ukrainian, Pesian, Latvian, and Estonian as well, while also meaning "no" in Welsh, Latin, and Irish.

[1] https://www.notebook.ai/app/babel

"Nullis" has nothing with Ukrainian as it uses Cyrillic alphabet. And if to use transliteration then "нулис" is not an Ukrainian word either.

Interesting, good to know. I think we can blame that on Google Translate [1], I guess. Dunno where to find better (automated) translations, but I'd be happy to use that source (as long as it has an API) instead!

[1] https://i.imgur.com/PBswmaH.png

In ukranian zero is нуль (nul) it sounds almost identical to nulis (only without endig -is)

Wix in German (from the verb wixen) means wank. Added bonus: many of my German speaking friends use it (wix.com).

"nulis" also means "write" in Indonesian

The correct form is 'menulis', 'nulis' is more like the informal daily use form

'Mėnulis' means 'the Moon' in Lithuanian. No getting away from our language :)

There are many of these for car names: Chevy Nova (no va), and Mazda Miata sounding phonetically similar to mierda in Spanish.

Mazda isn't the best at naming it seems, the Mazda MR2 spelt one by one sounds like "merde" in French.

MR2 was Toyota.

I'm the creator of the app that inspired this one, http://gingkoapp.com

They say imitation is the best form of flattery, but I'm surprised Ray that you didn't credit Gingko at all. It's practically identical.



Edit: My bad... it's not on the website, but I see Gingko mentioned and linked in the Readme. Thanks Ray.

> Nulis is an open source tree editor for writers, inspired by Gingko. To learn how it works, visit https://nulis.io/about and try it out.

He does say "inspired by", though not sure if that was the credit you are expecting.

I think that's plenty of recognition. Most people wouldn't even bother out of fear of losing potential users to the "original".

Unfortunately, being the first or most common product in a space has the side effect of attracting copies, spin offs, or other imitations.

It's in like the first sentence of the Readme.

> Nulis is an open source tree editor for writers, inspired by Gingko.

I will say that it's not mentioned anywhere on nulis.io however.

Ok, glad it's mentioned somewhere.

Couldn't find any mention first time I checked it out.

I think it's absolutely acceptable to ask for more references if you feel it's insufficient.

See also: Microviche plugin for vim: https://github.com/q335r49/microviche

It allows one to "pan and zoom through text", there's also a screencast: https://www.youtube.com/watch?v=9YNiPUTGO28

I'm not a Vim user anymore, but this is definitely the most interesting (also, peculiar) approach to a non-coder's writing tool I've come across over many years of text editor geekery. I tried to hack together something similar for Plan9's Acme and Sam, but unfortunately those efforts led nowhere.

This visually reminds me of some of the Federated Wiki concepts Ward C has been working on for awhile [1]

[1] - http://sandbox.fed.wiki.org/view/welcome-visitors

Also ConnectedText, which is the closest to Tinderbox that Windows users have. Scrivener, maybe.

Just tried both Gingko and this. The concept is fascinating! (I've been using Checkvist for years now.)

I find this much easier to learn to use, as I don't have to toggle between edit mode and non-edit mode. (Modality can be tricky: https://medium.com/interaction-reimagined/dangers-of-modal-u... - shameless plug :) )

I don't like markdown either though, the extra markup interferes with my thinking. Though there is no UI modality, I feel it adds a cognitive modality where I need to switch between thinking about the actual content, and the translation from text semantics to markdown syntax.

But I suppose I could stick to plaintext with these apps. A subtle rich text editing possibility would be appreciated too though.

Edit: Scandinavian keyboards require pressing shift to get /. So accessing the search bar doesn't seem to work at all.

Oh! There is an edit/preview mode, it's just global. I think I like it.

I'm not sure what good the Affero GPL license is good for in this case. The resulting software cannot be distributed under it: It depends on React as a critical and integral component to its functionality. I cannot distribute the resulting software under AGPL, because it contains known patents I lack the right to distribute under the terms of the AGPL license.

Fun fact: nulis/menulis in Bahasa Indonesia is 'writing'

Author replied:I think this is where I got the idea for the name from =) Was looking for something that sounds awesome and relevant, and somehow stumbled upon this word.


Also see Treesheets:


This would be more useful if like project gutenberg (wordpress editor redesign) each card/block could be "structured data" (image, text, table, etc) - it would be pretty neat tool to use for a Knowledge base.

"project gutenberg (wordpress editor redesign)"

That is a spectacularly poor choice of name.

https://www.gutenberg.org/wiki/Main_Page https://wordpress.github.io/gutenberg/

That in turn reminds me of Tiddlywiki, which I kind of love and use for all kinds of one-offs: http://tiddlywiki.com/

Well, each card is written in markdown/html, so all of that can be used.

It´s a interesting approach. I like to organize my ideas on a different kind of trees. I created Sorter for personal use https://github.com/vitogit/sorter

Seems like https://fictionhub.io/post/story-writing-process/ is not parsing the markdown correctly. There are a couple of ###

Love the idea. Reminds me of Workflowy (which has focus on task list in trees).

Check it out: https://workflowy.com/

Thanks! I love workflowy as well, although personally I use the org-mode. Think of Nulis as workflowy/org-mode with a second dimension =)

As workflowy fan, I've tried to love org-mode, but failed. I've since moved to Dynalist.io.

Like the look of this a lot. I'm a fan of mind maps for getting work done. I might suggest that unless you think that a large portion of your audience are vim users then you might use ijkl instead of hjkl. For a non-vim user ijkl is completely natural but hjkl will be annoying.

You prefer they use something that 'feels' natural to you over a very commonly used pattern?

Left/Up/Down/Right on the same middle row is more intuitive than putting Up on a higher row IMO. On my thinkpad "i" is not centered above "k" (the way Up/Down arrow keys are aligned), it's offset over both "j" and "k", so when not looking at my keys while typing this will likely cause more errors.

AFAICT it's only common in for developer-oriented tools that want to be familiar to vi users.

The average writer has probably never seen hjkl navigation before, and it is much harder to get used to than a slightly off-center "i" key.

Why not use the same pattern as games then?

I've personally never seen I/JKL before and over the years I've come to believe Vim made the right choice by use HJKL on the 'home row', so I might be biased. I can put my four fingers on all 4 keys at once with HJKL, but I can't with I/JKL.

This is a standard starting position (just shifted over one key left):


Then there's other keyboard layouts. (Dvorak reporting in!) :-)

Up being to the right of Left and to the left of Down is intuitive to you? I'd say Up and Down being as their name suggests would be more intuitive....

How about a configurable keymap that doesn't assume the QWERTY layout?

This is kind of the same idea behind Xanadu[1] right? I fail to see the benefits of this multidimensional navigation through text. Getting lost seems way to easy in this kind of interfaces.

[1] - http://xanadu.com/

As I understand it, xanadu's goal is to interstitch documents, in a similar manner (I just realized) to git blame; documents are composed of original text, and pieces of other documents, recursively. So you can traverse the history not just of the document, but the blocks of text as they get referenced and pointed to by newer documents. I can't remember though if those blocks were meant to be updated as the original does, or if they're treated immutably.

This on the other hand has a much simpler goal: organizing your documents into a tree. Afaict, it can be treated/navigated like a file system, except that theres no distinction between file and directory.

> I fail to see the benefits of this multidimensional navigation through text.

You just wrote a comment containing a hyperlink.

If I click that link, I go to another page that has text I can read.

I can come back here.

I can reach that page from other pages too.

That means that you just made a node in a graph, and have it an edge to another node in that graph.

Your comment is about as ironic as it gets.

Curious why the readme is only available in image format, also, was there a mistake? It says Ctrl + l is to create a node to the left, but then it says "for example, use ctrl +l to create a new card to the right."

Ctrl+L would move to the right, and Ctrl+Shift+L would create a new node to the right. So above that where it says "L - left" is incorrect.

There's also a typo "beraking" that hasn't been fixed after several mentions.

Fun fact nulis means writing in indonesian

Actually I came up with the name by using google translate. I've put in related words like writing/ideas/thinking/etc, and then scrolled through translations until I've stumbled upon a cool sounding one =)

Looks cool.

A suggestion: I'd recommend using Tree Notation (https://github.com/breck7/treeprogram) for your storage format, instead of JSON. (disclaimer: author of TN)

I can actually help you build your own language on top of TN using some new tools, if interested, which might be very useful to you. Email is in profile.

It would be nice if you provided a disclaimer that you are the author of that library. It looks interesting, but what problem would it solve ?

Good point. Added disclaimer.

> what problem would it solve ?

First, it would support current functionality, so you wouldn't lose anything. So everything that it adds is a net gain.

Second and biggest benefit, I believe it would allow them to add features more easily because they'd easily be able to build a simple and well structured Nulis DSL in Tree Notation that removes a lot of the incidental complexity of their current code.

Third, it would make their "nls" files human readable and writeable. No more quotes or brackets, et cetera. With a few tweaks to their current implementation, folks could then drop in more file structures that can then be visualized and edited in nls.

Best and most general option that I know of is Org mode (Emacs). But regardless, I'm glad more people are picking up on the power of hierarchical text editing (and interfaces more friendly to non-programmers are a reasonably good thing). But if you really want to go all the way, and get arbitrary directed graphs of text content, check out org-brain.

I think the original app that inspired it was gingko[1] but it's nice that we can see the source of this one[2]

[1] - https://gingkoapp.com

[2] - https://github.com/raymestalez/nulis

As a plain-text editor fan, I use Org mode in Emacs for Tree-based documentation and blogging.

Thank you. I use gingko, it is perfect but not self hosted. And tiddlyWiki with graph map extensions got too much extra stuff I do not need.

Not sure how I feel about mongo as backend but, if this app got same export features as gingko I am sold.

Because Nulis is written in React, frontend and backend are pretty much separate. Mongo/Node just create an api and send/receive trees formatted as one big json object. Backend is very simple, and should be easy to replace with anything else.

Also, you can just use file>save/open feature, which saves a tree as a json file, purely from the frontend.

The desktop version of the app can work without the backend at all(server used just for cloud sync, all trees are saved as files).

There's no mention of a "desktop version" in the About page - where should I be looking for that?







Note that Desktop is in a very early version, Mac/Windows are not tested at all. I'll keep updating it and making it more stable as I continue the development.

I used https://germ.io for a looong time. It's a really good implementation of this idea.

(No affiliation)

I could be interested, but this landing page is really awful at conveying useful information about the product.

Would someone use this? I think a text editor is a pretty good tree editor as it is but then again, as a programmer I see everything as parse trees anyway :)

My take on this is that it's not aimed at coding but more like a way to map ideas.

fyi, i wrote something fairly intricate in tree format and the account creation process deleted it without confirmation after logging me in

I love Gingko...I will try this new variation later but does anyone have any notes on how these two apps differ?

Hey there's a little typo in "How it works":

"beraking down your large writing goals"

I like the idea, this could be useful for education, I see it as mindmap for taking notes.

Looks nice. Just take note of the AGPL license.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact