npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

stone-soup-pub

v1.1.5

Published

Host Earthstar workspaces via HTTP

Downloads

1

Readme

Earthstar Pub -- Stone Soup edition

This version is built on Stone Soup which is a second-gen implementation of Earthstar.


Hosts and syncs Earthstar workspaces over HTTP. One pub server can hold multiple Earthstar workspaces.

Data is stored in an SQLite file. You can also just keep data in memory if you don't have a persistent filesystem on your server, but it will be lost when the server restarts... and then sync'd again from the clients. :)

You can

  • View the data through a web interface
  • Sync your local data to/from the server using earthstar-cli
  • Sync to Earthstar web apps such as Twodays-Crossing, Earthstar-Foyer, Earthstar-Lobby, etc.

Pub servers don't sync directly to each other (yet?) and clients don't sync directly to each other (yet). Only Pub<-->Client connections are made. But each client can talk to several pubs, and it decides which pubs it wants to push its workspaces to.

Demo

https://earthstar-demo-pub-v6-a.glitch.me/

How to deploy

Run on Glitch.com

Make your own copy on Glitch by going here and clicking "Remix this".

Or start a new Glitch project from scratch:

  • Make a new Express project
  • Go to Glitch's package.json, click "Add package", and add earthstar-pub
  • Delete the demo code from server.js
  • Copy-paste the code from this repo's example.js into Glitch's server.js
  • Rename your project, at the top left
  • Click "🕶 Show > In a New Window" to visit your pub

On Glitch, the sqlite data is stored in a special hidden directory (maybe called /.data, I don't remember) which nobody can see or clone from your project. Files in that directory persist even when Glitch restarts your app.

If the pub is running just in memory-storage mode, it will forget all the data when Glitch restarts it (which happens often).

Easy command-line install on your local machine

Install

npm install --global earthstar-pub

Run

earthstar-pub

Then visit http://localhost:3333.

Options:

Usage: earthstar-pub [options]

Run an HTTP server which hosts and replicates Earthstar workspaces.

Options:
  -p, --port <port>   Which port to serve on
                        (default: "3333")

  --readonly          Don't accept any pushed data from users
                        (default: false)

  -c, --closed        Accept data to existing workspaces but
                        don't create new workspaces.
                        (default: false)

  -d, --discoverable  Allow workspace addresses to be discovered
                        via the web interface.  Only use
                        this for testing purposes.
                        (default: false)

  -s, --sqlite        Use sqlite instead of memory.  Default is memory.
                        (default: false)

  --dataFolder <folder>
                      Folder in which to store sqlite files.
                        Defaults to current directory.
                        Only used for sqlite, not memory.
                        (default: ".")
                      
  --logLevel <logLevel>
                      Show this many logs. 0 = none, 1 = basic, 2 = verbose,
                        3 = include sensitive information (workspace addresses).
                        (default: "0")

  -t, --title <title> A title for your pub, shown on the main page

  -n, --notes <notes> Longer notes about your pub, shown on the main page

Run on a Raspberry Pi

See this wiki page

Run on fly.io

Fly.io is an easy way to run Node apps and Dockerfiles. They have a free tier. You get a subdomain with SSL and you can add a persistent filesystem for $0.15/gb/month.

A test pub is running on Fly: https://earthstar-demo-pub-6b.fly.dev/

Follow the default setup steps for a Node app but you need to change the app name to something you like, and change all ports 8080 to 3333 in the config file since that's our default port.

Get a local copy of this repo:

  • git clone [email protected]:earthstar-project/earthstar-pub.git
  • cd earthstar-pub
  • npm install; npm build

Deploy on Fly:

  • Install the flyctl command line tool
  • Make an account:
    • flyctl auth signup
    • Check your email and click the link there to get into the Fly dashboard.
  • Prepare for deployment - this figures out that you have a Node app and makes a config file.
    • flyctl launch --name my-cool-earthstar-pub
    • don't actually deploy it yet
    • edit fly.toml and change all port 8080 to 3333
  • Actually deploy it. This builds a Docker image which takes a minute; --remote-only makes it build the Docker image on their server instead of requiring you to have Docker installed on your own machine.
    • flyctl deploy --remote-only
  • See info about your site
    • flyctl status
  • See logs from your site
    • flyctl logs
  • Launch your browser
    • flyctl open

Don't try to "suspend" or "resume" your site, that seems to break Fly.io. Also it seems to fail if you delete a site and make a new one with the same name.

This isn't set up with a persistant volume for storing data, but the data seems to last "long enough" to be useful as a pub. Fly.io doesn't shut down your server during periods of inactivity so your data will last a while, and even if it gets wiped it will be re-populated with data synced up from browser clients.

TODO: how to customize your pub using the title and notes field in example.js. Right now we're running the code using npm run start which uses all the default command line options; I'm not yet sure how to change the command line that runs. We might have to make our own Dockerfile.

Developing

Clone and install

git clone https://github.com/earthstar-project/earthstar-pub
cd earthstar-pub
npm install

Compile typescript

npm run build

Start the server

npm start

Then visit http://localhost:3333.