PHP 8 Server for Nex Protocol
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
yggverse 4caf43833f update readme 1 month ago
src draft kevacoin driver 1 month ago
.gitignore init composer 2 months ago
LICENSE Initial commit 2 months ago update readme 1 month ago
composer.json update description 1 month ago
default.json implement startup mode, init nex filesystem server 2 months ago


PHP 8 server for different protocols

Based on Ratchet asynchronous socket library


  • Async socket
  • Multi-host
  • Multi-protocol:
  • Multi-mode:
    • Static file hosting
      • filesystem navigation on directory request
        • optional gemfeed file modification date
        • unicode filenames support
        • filter hidden context (started with dot)
        • sort order settings (currently dir first, asc)
      • custom index file name
      • custom failure template
      • custom data directory location
    • KevaCoin storage browser
    • Custom application
    • Reverse proxy
    • Stream server
  • Connection event log
  • Simple and flexible server configuration by CLI arguments



apt install git composer php-fpm php-mbstring
  • for kevacoin server mode, also required php-curl extension


Project under development, use repository version!


  • git clone
  • cd next - navigate into the project directory
  • composer update - grab latest dependencies



Create as many servers as wanted by providing different type, host, port, type, mode and other arguments!

  • for security reasons, file server prevents any access to the hidden files (started with dot)
  • also, clients can't access any data out the root path, that defined on server startup

Startup example

php src/server.php host= port=1900 type=nex mode=fs root=/target/dir


Optional arguments auto-defined by server protocol type selected

Some arguments also defined in default.json - do not change it without understanding, use CLI instead!


Provide arguments in key=value format, separated by space

Children nodes dependent of parent arguments defined and would be skipped in other combinations!

Following list explains key dependencies and it value options (started with =)

  • type - required, server protocol, also auto-defines default port, supported options:
    • = nex - NEX Protocol
      • mode - optional, server implementation variant, fs (filesystem) by default
        • = fs - static files hosting for the root location
          • root - absolute path to the public directory, where browser navigation starting from
          • file - file name that server try to open on directory path requested, disabled by default
          • list - show listing in directory requested (on index file not found), enabled by default
          • date - show file modification date (as gemfeed) in directory listing, disabled by default
        • = kevacoin - KevaCoin storage browser by RPC connection to the wallet (see kevacoin.conf)
          • rpcscheme - required, for example http
          • rpcport - required, default is 9992
          • rpchost - required, remote or localhost
          • rpcuser - required
          • rpcpassword - required
          • namespace - required, remote or local namespace for data listing (started with N)
  • host - optional, default is e.g. localhost connections only
  • port - optional, default value depends of server type selected e.g. 1900 for nex or 1965 for gemini
  • fail - optional, absolute path to the failure template (e.g. /path/to/error.gmi), disabled by default
  • dump - optional, enable or disable server debug feature, enabled by default



Following example mean you have next server installed into home directory of next user (useradd -m next)

# /etc/systemd/system/next.service


ExecStart=/usr/bin/php /home/next/next/src/server.php type=nex mode=fs root=/home/next/public

  • systemctl daemon-reload - reload systemd configuration
  • systemctl enable next - enable service on system startup
  • systemctl start next - start server