Table of contents
[Show/Hide](this is a copy of https://raw.github.com/DrDub/thout/master/ROADMAP)
ROADMAP
Stage 1
- Basic server
  * Server asks for a document from all connections, one connection at
    a time, with timeout.
  * Server assumes enough resources to keep track of all hashes and
    connections.
  * Customizable hash function.
  * Maximum document size.
- Basic client
* Handles text/plain, text/html. * Documents are . * No hash blacklisting. * No disk storage.
Stage 2
- Extend server with:
  * Ask for documents on multiple connections simultaneously (e.g.,
    three connections at the same time).
  * Do not ask for documents exhaustively to all connections.
  * Drop hashes and connections to conform to a given resource
    consumption level.
- Extend the basic client with:
  * Console showing received and stored documents.
  * Handles thout://hash_function/hash URIs.
  * Hash blacklisting, meaning certain documents known to the user can
    be explicitly refused to be stored.
  * Pluggable handling of MIME types.
- (New) Node.js client
  * Serves documents from a particular folder. It is intended to work
    together with a regular HTTP server folder.
    * This process is quite complex, as internal URIs need to be
      changed to thout://hash_function/hash URIs.
      For example: 
      * Page index -links-to-> pages A, B, C
      * Page A -links-to-> pages B, D
      * Page B -links-to-> page C, A, index
      * Page C -links-to-> page D, index
      * Page D -links-to-> index
      The graph needs to be made into a tree, by dropping some nodes:
      * Page index -links-to-> pages A, B, C
      * Page A -links-to-> pages B, D
      * Page B -links-to-> page C
      * Page C -links-to-> page D
      * Page D
      Then topologically sorted: {D, C, B, A, index} and hashed in
      order with the links changed to thout://hash_function/hash
      links.
      
  * Also caches in memory a number of documents for the thout network.
Stage 3
- Extend server with:
* Capability to become a gateway, connecting to another server. * Needs to be able to detect search cycles and break them.
- Extend client with:
  * Capability to connect to multiple thout servers, bridging between
    them.
- Extend Node.js client with:
  * Capability to serve documents to multiple thout's servers,
    bridging between them.
  
Stage 4
- Freenet add-on:
* Bridges between freenet and thout. * Each freenet node is then potentially a thout node.
Stage 5
(When node.js handles asynchronous crypto.hash with buffers)
- Add to client and server the possibility to stream video.