
Show HN: Nulis – Open Source Tree Editor for Writers - rayalez
https://github.com/raymestalez/nulis
======
stevesimmons
It is a shame more people aren't aware of Leo
([http://leoeditor.com/](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?

~~~
sharpercoder
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?

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

~~~
fish_fan
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.

------
vincnetas
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](https://en.wikipedia.org/wiki/Mazda_Laputa)
(we know what "la puta" means in Spanish)

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

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

~~~
dmix
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](https://www.wikiwand.com/en/Mitsubishi_Pajero)

------
adriano_f
I'm the creator of the app that inspired this one,
[http://gingkoapp.com](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.

Thoughts?

\---

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

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

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

~~~
nxsynonym
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.

------
marttt
See also: Microviche plugin for vim:
[https://github.com/q335r49/microviche](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](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.

------
Multicomp
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](http://sandbox.fed.wiki.org/view/welcome-visitors)

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

------
savolai
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...](https://medium.com/interaction-reimagined/dangers-of-modal-user-
interfaces-316828de8161) \- 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.

------
kevin_b_er
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.

------
se7entime
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.

[https://mastodon.social/@rayalez/6864752](https://mastodon.social/@rayalez/6864752)

------
kqr2
Also see Treesheets:

[http://strlen.com/treesheets/](http://strlen.com/treesheets/)

------
ckluis
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.

~~~
mcguire
" _project gutenberg (wordpress editor redesign)_ "

That is a _spectacularly_ poor choice of name.

[https://www.gutenberg.org/wiki/Main_Page](https://www.gutenberg.org/wiki/Main_Page)
[https://wordpress.github.io/gutenberg/](https://wordpress.github.io/gutenberg/)

------
vitomd
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](https://github.com/vitogit/sorter)

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

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

Check it out: [https://workflowy.com/](https://workflowy.com/)

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

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

------
discreteevent
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.

~~~
dmix
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.

~~~
Retr0spectrum
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.

~~~
dmix
Why not use the same pattern as games then?

    
    
          W
        A/S/D
    

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):

[https://upload.wikimedia.org/wikipedia/commons/thumb/0/0d/QW...](https://upload.wikimedia.org/wikipedia/commons/thumb/0/0d/QWERTY-
home-keys-position.svg/2000px-QWERTY-home-keys-position.svg.png)

------
fimdomeio
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/](http://xanadu.com/)

~~~
setr
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.

------
komali2
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."

~~~
yardshop
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.

------
Lonte
Fun fact nulis means writing in indonesian

~~~
rayalez
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 =)

------
ece
[https://github.com/vimoutliner/vimoutliner](https://github.com/vimoutliner/vimoutliner)

------
breck
Looks cool.

A suggestion: I'd recommend using Tree Notation
([https://github.com/breck7/treeprogram](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.

~~~
stingraycharles
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 ?

~~~
breck
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.

------
Tenobrus
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.

------
xori
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](https://gingkoapp.com)

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

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

------
gcoda
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.

~~~
rayalez
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).

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

~~~
rayalez
Linux:

[https://nulis.io/downloads/Nulis-
linux-x64.zip](https://nulis.io/downloads/Nulis-linux-x64.zip)

Mac:

[https://nulis.io/downloads/Nulis-
darwin-x64.zip](https://nulis.io/downloads/Nulis-darwin-x64.zip)

Windows:

[https://nulis.io/downloads/Nulis-
win32-x64.zip](https://nulis.io/downloads/Nulis-win32-x64.zip)

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.

------
brosky117
I used [https://germ.io](https://germ.io) for a looong time. It's a really
good implementation of this idea.

(No affiliation)

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

------
fsloth
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
:)

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

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

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

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

"beraking down your large writing goals"

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

------
aargh_aargh
Looks nice. Just take note of the AGPL license.

