Project »  Thout


Table of contents


(this is a copy of https://raw.github.com/DrDub/thout/master/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
  * 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
  * 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
  • 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.