orly.dev

command module
v0.8.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 18, 2025 License: Unlicense Imports: 17 Imported by: 0

README

= image:./docs/orly.png[orly.dev]
:toc:
:note-caption: note 👉

image:https://img.shields.io/badge/godoc-documentation-blue.svg[Documentation,link=https://pkg.go.dev/orly.lol]
image:https://img.shields.io/badge/donate-geyser_crowdfunding_project_page-orange.svg[Support this project,link=https://geyser.fund/project/orly]
zap me: ⚡️mlekudev@getalby.com
follow me on link:https://jumble.social/users/npub1fjqqy4a93z5zsjwsfxqhc2764kvykfdyttvldkkkdera8dr78vhsmmleku[nostr]

nostr relay built from a heavily modified fork of https://github.com/nbd-wtf/go-nostr[nbd-wtf/go-nostr]
and https://github.com/fiatjaf/relayer[fiatjaf/relayer] aimed at maximum performance, simplicity and memory efficiency.

== Features

* a lot of bits and pieces accumulated from nearly 8 years of working with Go, logging and run control, XDG user data directories (windows, mac, linux, android)
* a cleaned up and unified fork of the btcd/dcred BIP-340 signatures, including the use of bitcoin core's BIP-340 implementation (more than 4x faster than btcd) (todo: ECDH from the C library tbd).
* AVX/AVX2 optimized SHA256 and SIMD hex encoder
* https://github.com/bitcoin/secp256k1[libsecp256k1]-enabled signature and signature verification (see link:p256k/README.md[here]).
* efficient, mutable byte slice-based hash/pubkey/signature encoding in memory (zero allocation decode from wire of all but id/pubkey/signature, can tolerate whitespace, at a speed penalty)
* custom badger-based event store that uses fast binary encoder for storage of events, and has a complete set of indexes so it doesn't need to decode events for any query until delivering them.
* link:cmd/vainstr[vainstr] vanity npub generator that can mine a 5-letter suffix in around 15 minutes on a 6 core Ryzen 5 processor using the CGO bitcoin core signature library.
* reverse proxy tool link:cmd/lerproxy[lerproxy] with support for Go vanity imports and https://github.com/nostr-protocol/nips/blob/master/05.md[nip-05] npub DNS verification and own TLS certificates
* link:https://github.com/nostr-protocol/nips/blob/master/98.md[nip-98] implementation with new expiring variant for vanilla HTTP tools and browsers.

== Releases

see link:https://github.com/mleku/orly/releases[Releases] for pre-built binaries built on latest stable Go 1.24. Linux binaries are built static and have no dependencies on `*.so` files on the host (so they can run on bare metal and in containers with nothing added).

== Building

If you just want to make it run from source, you should check out a tagged version.

The commits on these tags will explain what state the commit is at.

In general, the most stable versions are new minor tags, eg v1.2.0 or v1.23.0, and minor patch versions may not be
stable and occasionally may not compile (not very often).

Go 1.24 or better is required.

== Repository Policy

In general, the `main` branch will build, but occasionally may not.
It is where new commits are added once they are working, mostly, and allows people to easily see ongoing activity.

WARNING: IT IS NOT GUARANTEED TO BE STABLE... but it is getting there.

Use tags to pin to a specific version.
Tags are in standard Go semver pattern `vX.X.X`

== CGO and secp256k1 signatures library

By default, Go will usually be configured with `CGO_ENABLED=1`.
This selects the use of the C library from bitcoin core, which does signatures and verifications much faster (4x and
better) but complicates the build process as you have to install the library beforehand.
There is instructions in link:p256k/README.md[p256k/README.md] for doing this.

=== Disabling CGO

In order to disable the use of this, you must set the environment variable `CGO_ENABLED=0` and it the Go compiler will
automatically revert to using the btcec based secp256k1 signatures library.

----
export CGO_ENABLED=0
go build .
----

This will build the binary and place it in the root of the repository, and then you can move it where you like.

=== Static build

To produce a static binary, whether you use the CGO secp256k1 or disable CGO as above:

----
go build --ldflags '-extldflags "-static"' -o ~/bin/orly .
----

will place it into your `~/bin/` directory, and it will work on any system of the same architecture with the same glibc
major version (has been 2 for a long time).

== Configuration

The default will run the relay with default settings, which will not be what you want.

=== Show Current Configuration

To see the current active configuration:

----
orly env
----

To see the help information:

----
orly help
----

Environment variables that configure orly:

[cols="4"]
|===
| Environment variable | type | default | description 
| ORLY_APP_NAME              | string         | orly |
| ORLY_CONFIG_DIR            | string         | ~/.config/orly                                                                                                                            | location for configuration file, which has the name '.env' to make it harder to delete, and is a standard environment KEY=value<newline>... style
| ORLY_STATE_DATA_DIR        | string         | ~/.local/state/orly                                                                                                                       | storage location for state data affected by dynamic interactive interfaces
| ORLY_DATA_DIR              | string         | ~/.local/cache/orly                                                                                                                       | storage location for the event store
| ORLY_LISTEN                | string         | 0.0.0.0                                                                                                                                   | network listen address
| ORLY_PORT                  | int            | 3334                                                                                                                                      | port to listen on
| ORLY_LOG_LEVEL             | string         | info                                                                                                                                      | debug level: fatal error warn info debug trace
| ORLY_DB_LOG_LEVEL          | string         | info                                                                                                                                      | debug level: fatal error warn info debug trace
| ORLY_PPROF                 | string         | <empty>                                                                                                                                   | enable pprof on 127.0.0.1:6060
| ORLY_AUTH_REQUIRED         | bool           | false                                                                                                                                     | require authentication for all requests
| ORLY_PUBLIC_READABLE       | bool           | true                                                                                                                                      | allow public read access to regardless of whether the client is authed
| ORLY_SPIDER_SEEDS          | []string       | wss://profiles.nostr1.com/,
wss://relay.nostr.band/,
wss://relay.damus.io/,
wss://nostr.wine/,
wss://nostr.land/,
wss://theforest.nostr1.com/,
wss://profiles.nostr1.com
| seeds to use for the spider (relays that are looked up initially to find owner relay lists) (comma separated)
| ORLY_SPIDER_TYPE           | string         | directory                                                                                                                                 | whether to spider, and what degree of spidering: none, directory, follows (follows means to the second degree of the follow graph)
| ORLY_SPIDER_FREQUENCY      | time.Duration  | 1h                                                                                                                                        | how often to run the spider, uses notation 0h0m0s
| ORLY_SPIDER_SECOND_DEGREE  | bool           | true                                                                                                                                      | whether to enable spidering the second degree of follows for non-directory events if ORLY_SPIDER_TYPE is set to 'follows'
| ORLY_OWNERS                | []string       | []                                                                                                                                        | list of users whose follow lists designate whitelisted users who can publish events, and who can read if public readable is false (comma separated)
| ORLY_PRIVATE               | bool           | false                                                                                                                                     | do not spider for user metadata because the relay is private and this would leak relay memberships
| ORLY_WHITELIST             | []string       | []                                                                                                                                        | only allow connections from this list of IP addresses
| ORLY_SECRET_KEY            | string         | <empty>                                                                                                                                   | secret key for relay cluster replication authentication
| ORLY_PEER_RELAYS           | []string       | []                                                                                                                                        | list of peer relays URLs that new events are pushed to in format <pubkey>\|<url>
|===

=== Create Persistent Configuration

This output can be directed to the profile location to make the settings editable without manually setting them on the
commandline:

----
orly env > $HOME/.config/orly/.env
----

You can now edit this file to alter the configuration.

Regarding the configuration system, this is an element of many servers that is absurdly complex, and for which reason
orly doesn't use a complicated scheme, a simple library that allows automatic configuration of a series of options,
added a simple info print:

----
orly help
----

will show you the instructions, and the one simple extension of being able to use a standard formated .env file to
configure all the options for an instance.

=== Database Storage Location

The database is stored in `$HOME/.local/share/orly` and if need be you can stop `orly` delete everything in this
directory and restart to "nuke" the database.

== API support

=== Standard Nostr NIPs

`orly` already accepts all the standard NIPs mainly nip-01, and many other types are recognised such an NIP-42 auth
messages and it uses and parses relay lists, and all that other stuff.

[#_simplified_nostr]
=== Simplified Nostr

Rather than write a text that will likely fall out of date very quickly, simply run `orly` and visit its listener
address (eg link:http://localhost:3334/api[http://localhost:3334/api]) to see the full documentation.

By default, this presents you with a Scalar Docs page that lets you browse the available API methods and shows examples
in many forms including cURL and most languages how to call and what data needs to go in headers, body, and parameters
and what results will come back.

There is even a subscription endpoint, also, which uses SSE format and doesn't require a websocket upgrade to work with.

Documentation

Overview

Package main is a nostr relay with a simple follow/mute list authentication scheme and the new HTTP REST-based protocol. Configuration is via environment variables or an optional .env file.

Directories

Path Synopsis
cmd
benchmark command
lerproxy command
Command lerproxy implements https reverse proxy with automatic LetsEncrypt usage for multiple hostnames/backends,your own SSL certificates, nostr NIP-05 DNS verification hosting and Go vanity redirects.
Command lerproxy implements https reverse proxy with automatic LetsEncrypt usage for multiple hostnames/backends,your own SSL certificates, nostr NIP-05 DNS verification hosting and Go vanity redirects.
lerproxy/buf
Package buf implements a simple concurrent safe buffer pool for raw bytes.
Package buf implements a simple concurrent safe buffer pool for raw bytes.
lerproxy/hsts
Package hsts implements a HTTP handler that enforces HSTS.
Package hsts implements a HTTP handler that enforces HSTS.
lerproxy/reverse
Package reverse is a copy of httputil.NewSingleHostReverseProxy with addition of "X-Forwarded-Proto" header.
Package reverse is a copy of httputil.NewSingleHostReverseProxy with addition of "X-Forwarded-Proto" header.
lerproxy/tcpkeepalive
Package tcpkeepalive implements a net.TCPListener with a singleton set period for a default 3 minute keep-aline.
Package tcpkeepalive implements a net.TCPListener with a singleton set period for a default 3 minute keep-aline.
lerproxy/timeout
Package timeout provides a simple extension of a net.TCPConn with a configurable read/write deadline.
Package timeout provides a simple extension of a net.TCPConn with a configurable read/write deadline.
lerproxy/util
Package util provides some helpers for lerproxy, a tool to convert maps of strings to slices of the same strings, and a helper to avoid putting two / in a URL.
Package util provides some helpers for lerproxy, a tool to convert maps of strings to slices of the same strings, and a helper to avoid putting two / in a URL.
nauth command
nurl command
Package main is a simple implementation of a cURL like tool that can do simple GET/POST operations on a HTTP server that understands NIP-98 authentication, with the signing key found in an environment variable.
Package main is a simple implementation of a cURL like tool that can do simple GET/POST operations on a HTTP server that understands NIP-98 authentication, with the signing key found in an environment variable.
vainstr command
Package main is a simple nostr key miner that uses the fast bitcoin secp256k1 C library to derive npubs with specified prefix/infix/suffix strings present.
Package main is a simple nostr key miner that uses the fast bitcoin secp256k1 C library to derive npubs with specified prefix/infix/suffix strings present.
walletcli command
pkg
app
Package app implements the orly nostr relay.
Package app implements the orly nostr relay.
app/config
Package config provides a go-simpler.org/env configuration table and helpers for working with the list of key/value lists stored in .env files.
Package config provides a go-simpler.org/env configuration table and helpers for working with the list of key/value lists stored in .env files.
app/relay/options
Package options provides some option configurations for the relay.
Package options provides some option configurations for the relay.
crypto/ec
Package btcec implements support for the elliptic curves needed for bitcoin.
Package btcec implements support for the elliptic curves needed for bitcoin.
crypto/ec/base58
Package base58 provides an API for working with modified base58 and Base58Check encodings.
Package base58 provides an API for working with modified base58 and Base58Check encodings.
crypto/ec/bech32
Package bech32 provides a Go implementation of the bech32 format specified in BIP 173.
Package bech32 provides a Go implementation of the bech32 format specified in BIP 173.
crypto/ec/chaincfg
Package chaincfg provides basic parameters for bitcoin chain and testnets.
Package chaincfg provides basic parameters for bitcoin chain and testnets.
crypto/ec/chainhash
Package chainhash provides abstracted hash functionality.
Package chainhash provides abstracted hash functionality.
crypto/ec/ecdsa
Package ecdsa provides secp256k1-optimized ECDSA signing and verification.
Package ecdsa provides secp256k1-optimized ECDSA signing and verification.
crypto/ec/musig2
Package musig2 provides an implementation of the musig2 protocol for bitcoin.
Package musig2 provides an implementation of the musig2 protocol for bitcoin.
crypto/ec/schnorr
Package schnorr provides custom Schnorr signing and verification via secp256k1.
Package schnorr provides custom Schnorr signing and verification via secp256k1.
crypto/ec/secp256k1
Package secp256k1 implements optimized secp256k1 elliptic curve operations in pure Go.
Package secp256k1 implements optimized secp256k1 elliptic curve operations in pure Go.
crypto/ec/secp256k1/precomps command
Package main provides a generator for precomputed constants for secp256k1 signatures.
Package main provides a generator for precomputed constants for secp256k1 signatures.
crypto/ec/taproot
Package taproot provides a collection of tools for encoding bitcoin taproot addresses.
Package taproot provides a collection of tools for encoding bitcoin taproot addresses.
crypto/ec/wire
Package wire contains a set of data structure definitions for the bitcoin blockchain.
Package wire contains a set of data structure definitions for the bitcoin blockchain.
crypto/encryption
Package encryption contains the message encryption schemes defined in NIP-04 and NIP-44, used for encrypting the content of nostr messages.
Package encryption contains the message encryption schemes defined in NIP-04 and NIP-44, used for encrypting the content of nostr messages.
crypto/keys
Package keys is a set of helpers for generating and converting public/secret keys to hex and back to binary.
Package keys is a set of helpers for generating and converting public/secret keys to hex and back to binary.
crypto/p256k
Package p256k is a signer interface that (by default) uses the bitcoin/libsecp256k1 library for fast signature creation and verification of the BIP-340 nostr X-only signatures and public keys, and ECDH.
Package p256k is a signer interface that (by default) uses the bitcoin/libsecp256k1 library for fast signature creation and verification of the BIP-340 nostr X-only signatures and public keys, and ECDH.
crypto/sha256
Package sha256 is taken from github.com/minio/sha256-simd, implementing, where available, an accelerated SIMD implementation of sha256.
Package sha256 is taken from github.com/minio/sha256-simd, implementing, where available, an accelerated SIMD implementation of sha256.
encoders/bech32encoding
Package bech32encoding implements NIP-19 entities, which are bech32 encoded data that describes nostr data types.
Package bech32encoding implements NIP-19 entities, which are bech32 encoded data that describes nostr data types.
encoders/bech32encoding/pointers
Package pointers is a set of basic nip-19 data types for generating bech32 encoded nostr entities.
Package pointers is a set of basic nip-19 data types for generating bech32 encoded nostr entities.
encoders/bech32encoding/tlv
Package tlv implements a simple Type Length Value encoder for nostr NIP-19 bech32 encoded entities.
Package tlv implements a simple Type Length Value encoder for nostr NIP-19 bech32 encoded entities.
encoders/envelopes
Package envelopes provides common functions for marshaling and identifying nostr envelopes (JSON arrays containing protocol messages).
Package envelopes provides common functions for marshaling and identifying nostr envelopes (JSON arrays containing protocol messages).
encoders/envelopes/authenvelope
Package authenvelope defines the auth challenge (relay message) and response (client message) of the NIP-42 authentication protocol.
Package authenvelope defines the auth challenge (relay message) and response (client message) of the NIP-42 authentication protocol.
encoders/envelopes/closedenvelope
Package closedenvelope defines the nostr message type CLOSED which is sent from a relay to indicate the relay-side termination of a subscription or the demand for authentication associated with a subscription.
Package closedenvelope defines the nostr message type CLOSED which is sent from a relay to indicate the relay-side termination of a subscription or the demand for authentication associated with a subscription.
encoders/envelopes/closeenvelope
Package closeenvelope provides the encoder for the client message CLOSE which is a request to terminate a subscription.
Package closeenvelope provides the encoder for the client message CLOSE which is a request to terminate a subscription.
encoders/envelopes/countenvelope
Package countenvelope is an encoder for the COUNT request (client) and response (relay) message types.
Package countenvelope is an encoder for the COUNT request (client) and response (relay) message types.
encoders/envelopes/eoseenvelope
Package eoseenvelope provides an encoder for the EOSE (End Of Stored Events) event that signifies that a REQ has found all stored events and from here on the request morphs into a subscription, until the limit, if requested, or until CLOSE or CLOSED.
Package eoseenvelope provides an encoder for the EOSE (End Of Stored Events) event that signifies that a REQ has found all stored events and from here on the request morphs into a subscription, until the limit, if requested, or until CLOSE or CLOSED.
encoders/envelopes/eventenvelope
Package eventenvelope is a codec for the event Submission request EVENT envelope (client) and event Result (to a REQ) from a relay.
Package eventenvelope is a codec for the event Submission request EVENT envelope (client) and event Result (to a REQ) from a relay.
encoders/envelopes/messages
Package messages is a collection of example/common messages and machine-readable prefixes to use with OK and CLOSED envelopes.
Package messages is a collection of example/common messages and machine-readable prefixes to use with OK and CLOSED envelopes.
encoders/envelopes/noticeenvelope
Package noticeenvelope is a codec for the NOTICE envelope, which is used to serve (mostly ignored) messages that are supposed to be shown to a user in the client.
Package noticeenvelope is a codec for the NOTICE envelope, which is used to serve (mostly ignored) messages that are supposed to be shown to a user in the client.
encoders/envelopes/okenvelope
Package okenvelope is a codec for the OK message, which is an acknowledgement for an EVENT eventenvelope.Submission, containing true/false and if false a message with a machine readable error type as found in the messages package.
Package okenvelope is a codec for the OK message, which is an acknowledgement for an EVENT eventenvelope.Submission, containing true/false and if false a message with a machine readable error type as found in the messages package.
encoders/envelopes/reqenvelope
Package reqenvelope is a message from a client to a relay containing a subscription identifier and an array of filters to search for events.
Package reqenvelope is a message from a client to a relay containing a subscription identifier and an array of filters to search for events.
encoders/event
Package event provides a codec for nostr events, for the wire format (with ID and signature), for the canonical form, that is hashed to generate the ID, and a fast binary form that uses io.Reader/io.Writer.
Package event provides a codec for nostr events, for the wire format (with ID and signature), for the canonical form, that is hashed to generate the ID, and a fast binary form that uses io.Reader/io.Writer.
encoders/event/codectester
Package codectester is a tester to accept a large volume of (ostensibly valid) event data in a .jsonl (JSON line structured) file and categorize it into subsets that have failed at separate parts of the processing, a tool for testing the event codec.
Package codectester is a tester to accept a large volume of (ostensibly valid) event data in a .jsonl (JSON line structured) file and categorize it into subsets that have failed at separate parts of the processing, a tool for testing the event codec.
encoders/event/codectester/divider command
Package main is a tester that reads in a provided JSON line structured (.jsonl) document containing a set of events and attempts to parse them and prints out the events that failed various steps in the encode/decode process.
Package main is a tester that reads in a provided JSON line structured (.jsonl) document containing a set of events and attempts to parse them and prints out the events that failed various steps in the encode/decode process.
encoders/event/examples
Package examples is an embedded jsonl format of a collection of events intended to be used to test an event codec.
Package examples is an embedded jsonl format of a collection of events intended to be used to test an event codec.
encoders/eventid
Package eventid is a codec for managing nostr event Ids (hash of the canonical form of a nostr event).
Package eventid is a codec for managing nostr event Ids (hash of the canonical form of a nostr event).
encoders/filter
Package filter is a codec for nostr filters (queries) and includes tools for matching them to events, a canonical format scheme to enable compactly identifying subscription filters, and a simplified filter that leavse out the IDs and Search fields for use in the HTTP API.
Package filter is a codec for nostr filters (queries) and includes tools for matching them to events, a canonical format scheme to enable compactly identifying subscription filters, and a simplified filter that leavse out the IDs and Search fields for use in the HTTP API.
encoders/filters
Package filters is a set of tools for working with multiple nostr filters.
Package filters is a set of tools for working with multiple nostr filters.
encoders/hex
Package hex is a set of aliases and helpers for using the templexxx SIMD hex encoder.
Package hex is a set of aliases and helpers for using the templexxx SIMD hex encoder.
encoders/ints
Package ints is an optimised encoder for decimal numbers in ASCII format, that simplifies and accelerates encoding and decoding decimal strings.
Package ints is an optimised encoder for decimal numbers in ASCII format, that simplifies and accelerates encoding and decoding decimal strings.
encoders/ints/gen command
Package main is a generator for the base10000 (4 digit) encoding of the ints library.
Package main is a generator for the base10000 (4 digit) encoding of the ints library.
encoders/kind
Package kind includes a type for convenient handling of event kinds, and a kind database with reverse lookup for human-readable information about event kinds.
Package kind includes a type for convenient handling of event kinds, and a kind database with reverse lookup for human-readable information about event kinds.
encoders/kinds
Package kinds is a set of helpers for dealing with lists of kind numbers including comparisons and encoding.
Package kinds is a set of helpers for dealing with lists of kind numbers including comparisons and encoding.
encoders/subscription
Package subscription is a set of helpers for managing nostr websocket subscription Ids, used with the REQ method to maintain an association between a REQ and resultant messages such as EVENT and CLOSED.
Package subscription is a set of helpers for managing nostr websocket subscription Ids, used with the REQ method to maintain an association between a REQ and resultant messages such as EVENT and CLOSED.
encoders/tag
Package tag provides an implementation of a nostr tag list, an array of strings with a usually single letter first "key" field, including methods to compare, marshal/unmarshal and access elements with their proper semantics.
Package tag provides an implementation of a nostr tag list, an array of strings with a usually single letter first "key" field, including methods to compare, marshal/unmarshal and access elements with their proper semantics.
encoders/tag/atag
Package atag implements a special, optimized handling for keeping a tags (address) in a more memory efficient form while working with these tags.
Package atag implements a special, optimized handling for keeping a tags (address) in a more memory efficient form while working with these tags.
encoders/tags
Package tags provides a set of tools for composing and searching lists of tag.T as well as marshal/unmarshal to JSON.
Package tags provides a set of tools for composing and searching lists of tag.T as well as marshal/unmarshal to JSON.
encoders/text
Package text is a collection of helpers for working with text inside nostr events such as implementing the string escaping scheme defined in NIP-01.
Package text is a collection of helpers for working with text inside nostr events such as implementing the string escaping scheme defined in NIP-01.
encoders/timestamp
Package timestamp is a set of helpers for working with timestamps including encoding and conversion to various integer forms, from time.Time and varints.
Package timestamp is a set of helpers for working with timestamps including encoding and conversion to various integer forms, from time.Time and varints.
encoders/varint
Package varint is a variable integer encoding that works in reverse compared to the stdlib binary Varint.
Package varint is a variable integer encoding that works in reverse compared to the stdlib binary Varint.
interfaces/relay
Package relay contains a collection of server for enabling the building of modular nostr relay implementations.
Package relay contains a collection of server for enabling the building of modular nostr relay implementations.
interfaces/signer
Package signer defines server for management of signatures, used to abstract the signature algorithm from the usage.
Package signer defines server for management of signatures, used to abstract the signature algorithm from the usage.
interfaces/store
Package store is an interface and ancillary helpers and types for defining a series of API elements for abstracting the event storage from the implementation.
Package store is an interface and ancillary helpers and types for defining a series of API elements for abstracting the event storage from the implementation.
interfaces/typer
Package typer is an interface for server to use to identify their type simply for aggregating multiple self-registered server such that the top level can recognise the type of a message and match it to the type of handler.
Package typer is an interface for server to use to identify their type simply for aggregating multiple self-registered server such that the top level can recognise the type of a message and match it to the type of handler.
protocol/auth
Package auth implements NIP-42 authentication.
Package auth implements NIP-42 authentication.
protocol/dns
Package dns is an implementation of the specification of NIP-05, providing DNS based verification for nostr identities.
Package dns is an implementation of the specification of NIP-05, providing DNS based verification for nostr identities.
protocol/httpauth
Package httpauth provides helpers and encoders for nostr NIP-98 HTTP authentication header messages and a new JWT authentication message and delegation event kind 13004 that enables time limited expiring delegations of authentication (as with NIP-42 auth) for the HTTP API.
Package httpauth provides helpers and encoders for nostr NIP-98 HTTP authentication header messages and a new JWT authentication message and delegation event kind 13004 that enables time limited expiring delegations of authentication (as with NIP-42 auth) for the HTTP API.
protocol/relayinfo
Package relayinfo defines the types and helpers for working with NIP-11 relay Information Document.
Package relayinfo defines the types and helpers for working with NIP-11 relay Information Document.
protocol/ws
Package ws provides both relay and client websocket implementations, including a pool for fanning out to multiple relays and managing subscriptions.
Package ws provides both relay and client websocket implementations, including a pool for fanning out to multiple relays and managing subscriptions.
tests
Package tests provides a tool to generate arbitrary random events for fuzz testing the encoder.
Package tests provides a tool to generate arbitrary random events for fuzz testing the encoder.
utils/apputil
Package apputil provides utility functions for file and directory operations.
Package apputil provides utility functions for file and directory operations.
utils/atomic
Package atomic provides simple wrappers around numerics to enforce atomic access.
Package atomic provides simple wrappers around numerics to enforce atomic access.
utils/atomic/internal/gen-atomicint command
gen-atomicint generates an atomic wrapper around an integer type.
gen-atomicint generates an atomic wrapper around an integer type.
utils/atomic/internal/gen-atomicwrapper command
gen-atomicwrapper generates wrapper types around other atomic types.
gen-atomicwrapper generates wrapper types around other atomic types.
utils/chk
Package chk is a convenience shortcut to use shorter names to access the lol.Logger.
Package chk is a convenience shortcut to use shorter names to access the lol.Logger.
utils/context
Package context is a set of shorter names for the very stuttery context library.
Package context is a set of shorter names for the very stuttery context library.
utils/env
Package env is an implementation of the env.Source interface from go-simpler.org
Package env is an implementation of the env.Source interface from go-simpler.org
utils/errorf
Package errorf is a convenience shortcut to use shorter names to access the lol.Logger.
Package errorf is a convenience shortcut to use shorter names to access the lol.Logger.
utils/interrupt
Package interrupt is a library for providing handling for Ctrl-C/Interrupt handling and triggering callbacks for such things as closing files, flushing buffers, and other elements of graceful shutdowns.
Package interrupt is a library for providing handling for Ctrl-C/Interrupt handling and triggering callbacks for such things as closing files, flushing buffers, and other elements of graceful shutdowns.
utils/iptracker
Package iptracker provides functionality to track and block IP addresses based on failed authentication attempts.
Package iptracker provides functionality to track and block IP addresses based on failed authentication attempts.
utils/log
Package log is a convenience shortcut to use shorter names to access the lol.Logger.
Package log is a convenience shortcut to use shorter names to access the lol.Logger.
utils/lol
Package lol (log of location) is a simple logging library that prints a high precision unix timestamp and the source location of a log print to make tracing errors simpler.
Package lol (log of location) is a simple logging library that prints a high precision unix timestamp and the source location of a log print to make tracing errors simpler.
utils/normalize
Package normalize is a set of tools for cleaning up URL s and formatting nostr OK and CLOSED messages.
Package normalize is a set of tools for cleaning up URL s and formatting nostr OK and CLOSED messages.
utils/number
Package number implements a simple number list, used with relayinfo package for NIP support lists.
Package number implements a simple number list, used with relayinfo package for NIP support lists.
utils/qu
Package qu is a library for making handling signal (chan struct{}) channels simpler, as well as monitoring the state of the signal channels in an application.
Package qu is a library for making handling signal (chan struct{}) channels simpler, as well as monitoring the state of the signal channels in an application.
utils/units
Package units is a convenient set of names designating data sizes in bytes using common ISO names (base 10).
Package units is a convenient set of names designating data sizes in bytes using common ISO names (base 10).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL