All,
   I am pleased to announce the initial public offering of software I've 
taken to calling TiddlyServer <https://github.com/mklauber/TiddlyServer>. 
 TiddlyServer is a NW.js desktop application that can be used to setup a 
local server serving  multiple Wikifolders.

*To start off with, here's a quick look at the current UI.  *

<https://lh3.googleusercontent.com/-JAci075PzQM/Vzou22n4goI/AAAAAAAAATU/FlMnG_d3bqQr6ZueT4-FZnPVrS7C8HuxACLcB/s1600/Screenshot%2Bfrom%2B2016-05-16%2B16%253A33%253A51.png>

The top Row is how you add additional wiki folders.  Using the "Choose 
File" button you can select the root folder of your WikiFolder instance.
The text box is the prefix you want the site to be available at.  
The Add button has a click event that adds the path and prefix to the 
config, starts the server, and then refreshes the UI.

Below that are multiple rows of Individual wikis.  Right now they're very 
sparse, grabbing just the title from the wiki itself, then listing the 
prefix for that wiki.  Clicking anywhere on the row for a wiki opens it in 
your default browser.
The Delete word is a button that stops the server and removes the wiki from 
the config file, then updates the UI.

*Now a quick look at how this is designed.*

This application is basically a big wrapper around being able to start 
multiple instances of TW5.  the code here 
<https://github.com/mklauber/TiddlyServer/blob/master/source/js/server.js> 
contains most of the logic.  

   1. Upon starting up, it loads a config file if it exists, instantiates a 
                           TW5 instance for each wikifolder in the list.
                           1. The instance of TW5 is running a custom TW5 
                              command "unixserver 
                              
<https://github.com/mklauber/TiddlyWiki5/blob/multiserver/core/modules/commands/unixserver.js>"
 
                              that basically uses a unix socket file instead of 
a port number.
                              2. Each instance of TW5 starts listening on 
                              it's socketPath.
                           2. It also starts up a proxyServer listening on 
                           port 8080.  This proxyServer looks at the path part 
of the url, and uses 
                           that to proxy the request to the correct Socket.
                              1. If the wiki path does not match any prefix 
                              it'll respond saying that path doesn't match any 
wikis, please choose from 
                              the list below... and lists the wikis
                           3. Finally, the UI starts up.  The UI allows the 
                           end user to add or remove the wikis and prefixes 
available.  
                        
*A few notes at present.*

   - This likely only works on Unix and OSX.  I'm currently relying on Unix 
   Socket files to communicate between the proxy server.  AFAIK, unix socket 
   files are not supported on Windows.  It would be possible to change this to 
   use multiple ports.
   - This does not support WikiFiles, yet.  Only WikiFolders.
   - The UI was hacked together via React in an afternoon to demonstrate 
   that this was feasible.  It does not provide basically any error handling.


*Installing:*

   1. Download the stable release of nw.js from http://nwjs.io/
   2. extract nw.js
   3. Clone the repository at https://github.com/mklauber/TiddlyServer.git
   4. cd to the `source` directory of the cloned repo
   5. run `npm install`

*Running: *

   1. run `/path/to/nw.js-vx.x.x-.../nw .`


I was inspired to tackle this based on some comments Jeremy made on the 
direction that he'd like to take TiddlyDesktop.  Hopefully the community 
finds it interesting, if not yet actually useful.  I would appreciate 
feedback, suggestions, and especially Pull Requests.

Thanks,
Matt Lauber

-- 
You received this message because you are subscribed to the Google Groups 
"TiddlyWikiDev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/tiddlywikidev.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tiddlywikidev/f21846e3-f3ac-4b31-86af-b6f252da61f3%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to