Help us shape the future of Go! Take the 2026 Go Developer Survey

nexo

module
v1.0.4 Latest Latest
Warning

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

Go to latest
Published: Oct 29, 2026 License: AGPL-3.0

README

Nexo

Nexo

Self-hosted, S3-compatible object storage in Go, with video streaming and responsive images built in.
One binary: S3 server, Admin API and web console. From one drive to a multi-node cluster.

CI Documentation Docker Hub

Quick start · Features · Video · Images · Screenshots · Documentation · Italiano

Sign in, a versioned bucket, an upload, a preview and a share link in the web console (recorded with make demo-gif).

✨ Why Nexo

  • One binary, no moving parts. nexo is the S3 server, the Admin API and the web console; there is no external metadata database. The same binary runs on one drive, on several drives with erasure coding, or as a cluster of nodes.
  • Really S3. It passes all 451 applicable tests of Ceph's s3-tests and the 638 of MinIO's mint SDK suites, on one drive, several drives and in a cluster: your SDKs, aws, rclone and backup tools just work.
  • Your videos play the moment they land. An uploaded MP4 streams as HLS straight away, and a media worker can add every quality from 240p to 4K, a poster and seek-bar thumbnails, with no ffmpeg anywhere.
  • Videos that cannot be downloaded, with no DRM vendor. For courses and members' areas: encrypted streams, playback tokens per viewer, a limit on simultaneous streams, a moving watermark with the viewer's name, and the original locked; for more, a Nexo-player-only mode with keys exchanged per session and an invisible forensic watermark that names the source of a leaked copy. One switch in the console (protected videos).
  • Every photo in the format and size each screen needs. The same worker turns every uploaded image into AVIF, WebP, JPEG and PNG at every width, and one URL serves the most compact one the browser accepts, on the S3 endpoint or on your own domain.
  • Built for operators. A console for everything, Prometheus metrics with a ready-made Grafana dashboard, live traces and logs, and packages for every platform.

Coming from MinIO? Follow the migration guide (every version, policies and users, verified with nexoctl diff). Choosing a store? See how Nexo compares with MinIO, SeaweedFS, Garage and Ceph RGW, including where another project fits better.

🚀 Quick start

Docker

docker run -d --name nexo -p 9000:9000 -p 9001:9001 \
  -e NEXO_ROOT_USER=admin \
  -e NEXO_ROOT_PASSWORD=supersecret \
  -v nexo-data:/data paolor/nexo:latest server /data

Binary (releases or make build)

export NEXO_ROOT_USER=admin NEXO_ROOT_PASSWORD=supersecret
nexo server ~/nexo-data
# several drives: nexo server /mnt/disk{1...4}

Open the console at http://localhost:9001 (user admin, password supersecret), or use the CLI:

nexoctl alias set local http://localhost:9000 admin supersecret
nexoctl mb local/photos
nexoctl cp hello.txt local/photos/
nexoctl share download --expire 2h local/photos/hello.txt     # a revocable link

Any S3 client works with the endpoint http://localhost:9000 and the same credentials, for example aws --endpoint-url http://localhost:9000 s3 ls. The images are on Docker Hub: paolor/nexo (server and CLI) and paolor/nexoctl (CLI only).

🧩 Features

🪣 S3 API

SigV4, buckets, objects, multipart, versioning, Object Lock, lifecycle, notifications, CORS, checksums, SSE-S3 / SSE-KMS / SSE-C encryption, presigned URLs and POST policies.

🛡️ Durability

Reed-Solomon erasure coding with configurable parity, bitrot protection, automatic healing, hot drive replacement, expansion with new pools.

🔐 Security

IAM users, groups and policies, access keys with expiry, STS, access rules with glob and regex, revocable share links, TLS with hot reload, mTLS between nodes, built-in KMS or KES, audit log, protected videos. Report a vulnerability: SECURITY.md.

🎬 Video and images

MP4 videos stream as HLS packaged on the fly, with revocable stream links and a public player page. The media worker adds renditions, posters and thumbnails (video), and every image in AVIF, WebP, JPEG and PNG at every width (images). Paid content plays encrypted and cannot be downloaded (protected videos).

🌍 Distributions

A bucket served on your own domains, CloudFront style: ACME certificates, signed URLs, in-memory and on-disk cache with automatic invalidation.

📈 Operations

Web console, Prometheus metrics with Grafana dashboard and alerts, live trace and logs, OpenTelemetry, deb/rpm, Homebrew, Docker images, Helm chart, systemd unit.

🎬 Video, built in

Upload an MP4 and it plays at once, in any browser and any HLS player: Nexo packages the stream on the fly from the file you stored, with no transcoding and nothing to prepare. Share it with a revocable stream link that opens a ready-made player page.

Create the bucket with the HLS video option (or add a media rule to an existing one) and nexo-media-worker derives more from every video it selects: lower qualities for slow networks (240p to 2160p, offered by the same playlist), a poster and the thumbnails of the seek bar. The worker is a separate Go program built on Cisco's OpenH264, no ffmpeg, that works through the S3 API with a least-privilege policy and never loses a job.

Videos that only your users may watch, and nobody may download: see protected videos.

The player page of a stream link
Player: HLS in any browser, with the quality picked for the network
The media panel of a video in the console
Media panel: poster, timeline thumbnails and renditions of a video
The media rules of a bucket
Media rules: which videos and images of a bucket get which outputs
# stream any MP4 through a revocable link
nexoctl share download --stream --expire 7d \
  local/videos/talk.mp4

# a video bucket: every quality, poster, thumbnails
nexoctl mb --with-hls local/videos
nexoctl cp intro.mp4 local/videos/
nexoctl media status local/videos/intro.mp4
Job on a 20 s 1080p video (4 vCPU Xeon 2.1 GHz) Speed
720p + 360p + 240p renditions 3.2× real time (a 10-minute video in about 3 minutes)
one rendition 4–4.5× real time
thumbnails, one per second 74× real time
poster 44 ms

Every job uses all the cores: the video is split at its keyframes and each part is decoded and encoded on its own core, with the same result byte for byte. Details: video streaming, media worker, benchmarks.

🔒 Protected videos

For course platforms, members' areas and paid content: videos your users can watch but not download, with no DRM vendor and no license server. Everything runs inside Nexo, and you switch it on per bucket from the console (bucket → Media → Video protection) or with nexoctl media protection set.

Threat What Nexo does
Downloading the file The original is refused to everyone without nexo:DownloadProtectedMedia: S3 GET, copy, select, console, zip archives and distributions
Saving the stream with a downloader The segments are encrypted (HLS AES-128, a new key every 10 segments); keys are released only at playback pace, so a downloader gets 429 and saves noise
Reading the keys in the browser Advanced mode (Nexo player only): an ECDH key exchange over a WebSocket, segments encrypted per session (AES-GCM), keys wrapped and kept non-extractable in WebCrypto; standard players and HLS downloaders get nothing
Sharing the link The link holds a short-lived playback token your application issues per viewer; it expires, it can be revoked per session or per viewer, and keys can be restricted to your site's origin
Sharing the account At most N simultaneous streams per viewer: a newer stream replaces the oldest one, on every node of a cluster
Recording the screen Cannot be prevented without commercial DRM: the player draws a moving watermark with the viewer's name or email, so a leaked copy names its source
Cropping the watermark, re-encoding Forensic watermark: every stream carries an invisible code of its token in the picture (A/B variants per segment); nexoctl media trace reads it from a leaked copy and names the viewer
// your backend (Node.js, Deno, Bun): one token per logged-in viewer
import { createNexoClient } from '@nexo-storage/player/server';
const nexo = createNexoClient({ endpoint: 'https://nexo.example.com:9001', accessKey, secretKey });
const { playlist } = await nexo.issuePlaybackToken({
  bucket: 'lms', key: 'courses/intro.mp4', subject: String(user.id), watermark: user.email,
});
<!-- your page: any HLS player works; this one also draws the watermark -->
<script type="module">
  import { defineNexoPlayer } from 'https://nexo.example.com:9000/nexo/media/sdk/index.js';
  defineNexoPlayer();
</script>
<nexo-player src="PLAYLIST_URL"></nexo-player>

Two levels. In the standard mode no special player is needed: a protected video is standard HLS, playable by Safari, hls.js, Video.js, Shaka, ExoPlayer or VLC with the playlist URL alone. In the advanced mode only the Nexo player plays it (its page, <nexo-player>, createPlayer()), with the same code on your side. The small JavaScript SDK (<nexo-player>, React, Angular, Vue, Node.js backends) covers both. Guide: video protection.

🖼️ Images in every format

Upload a photo once and every screen gets the right file. In an image bucket nexo-media-worker turns each picture into AVIF, WebP, JPEG and PNG at its own size and at every width from 160 to 2560 pixels, and a single URL serves the narrowest variant wide enough in the most compact format the client accepts: AVIF to recent browsers, WebP to the others, JPEG to everyone else. Pure Go, nothing like libvips or ImageMagick to install.

The variants of a photo in the media panel of the console
Variants: every format and width of a photo, with their size and a preview
The Create bucket dialog with the HLS video and Images in every format options
Image buckets: one switch when the bucket is created, or an image rule later
# an image bucket: every photo in AVIF, WebP, JPEG and PNG, at every width
nexoctl mb --with-images local/photos
nexoctl cp beach.jpg local/photos/
nexoctl media status local/photos/beach.jpg

# 640 pixels wide, in the best format the client accepts (a public bucket here:
# otherwise sign the URL or make a share link with nexoctl share download --image)
curl -H 'Accept: image/avif,image/webp' -o beach.avif \
  'http://localhost:9000/nexo/media/v1/photos/image/beach.jpg?w=640'
<!-- the browser picks the width, Nexo picks the format -->
<img src="https://s3.example.com/nexo/media/v1/photos/image/beach.jpg?w=640"
     srcset="https://s3.example.com/nexo/media/v1/photos/image/beach.jpg?w=320 320w,
             https://s3.example.com/nexo/media/v1/photos/image/beach.jpg?w=1280 1280w"
     sizes="(max-width: 700px) 100vw, 640px" alt="The beach">

On your own domain, the same URL serves AVIF, WebP or JPEG. A distribution of an image bucket answers https://cdn.example.com/photos/beach.jpg with the best format for the Accept header of each browser; ?w=640 asks for a width, ?format=webp for a format and ?format=original for the file you uploaded.

Formats AVIF, WebP, JPEG, PNG (all of them, or those of the rule)
Widths the image at its own size and 160, 320, 640, 1280, 1920, 2560 px; never enlarged
Sources JPEG, PNG, GIF, WebP, AVIF, HEIC (iPhone photos), TIFF, BMP, recognized by their content
Variants upright (EXIF orientation applied), no metadata (no EXIF, GPS or camera data), transparency kept
Job on a 12 MP photo (4 vCPU Xeon 2.1 GHz) Time
28 variants: 4 formats × its own size and 6 widths 11 s
14 variants, WebP and JPEG only 3 s

The variants are encoded in parallel within a memory budget, and decompression bombs are refused before they are decoded. Details: media worker, benchmarks.

📸 Screenshots

The overview of the web console (shown in dark mode when your browser prefers it). The images are taken from a demo deployment with make screenshots; drive capacity is shown as 4 × 1 TiB for illustration.

Object browser
Object browser: folders, uploads, versions, previews and share links
Bucket lifecycle
Bucket lifecycle: expiration, noncurrent versions and incomplete uploads
IAM policy editor
IAM policy editor: AWS policy JSON with completion, validation and a visual builder
Access rules
Access rules: allow and deny by prefix, glob or regex, with conditions
Distributions
Distributions: buckets served on custom domains, with TLS and traffic
Distribution cache
Distribution cache: hit ratio, bandwidth saved and top domains
Monitoring
Monitoring: requests, errors, latency and bandwidth of every node
Cluster
Cluster: pools, erasure sets, nodes and drives at a glance
Users
Users: IAM users with their policies and groups
Sign in
Sign in: the console uses the same access keys as the S3 API

⚡ Performance

Measured on a 4 vCPU Xeon virtual machine, with the method and the machine described in docs/bench (make bench and make bench-media measure your own hardware and save its description with the results):

warp, same VM 1 drive 4 drives, EC 2+2 cluster, 4 processes × 2 drives, EC 4+4
PUT 64 MiB objects 727 MiB/s 384 MiB/s 296 MiB/s
GET 64 MiB objects 3.8 GiB/s 2.9 GiB/s 1.4 GiB/s
Mixed workload 4439 op/s 2498 op/s 327 op/s
LIST 61 680 keys/s 18 604 keys/s 7093 keys/s

The cluster row runs four nodes on the same 4 vCPU machine: a real cluster spreads them over machines and networks. Video and image jobs are in the sections video and images.

📚 Documentation

📖 Documentation site: https://r3n3r0.github.io/Nexo/ (Italian: https://r3n3r0.github.io/Nexo/it/), with search, the CLI reference and the Admin API.

The same pages are in docs/user, in English with an Italian translation next to every page (<page>.it.md; also at https://github.com/R3n3r0/Nexo/tree/main/docs/user, for those reading this file from a release archive):

🏁 Quickstart the complete walkthrough in five minutes
📦 Installation binaries, deb/rpm, Homebrew, Docker, Compose, Helm, systemd
🗄️ Deployment modes single drive, multiple drives, cluster, sizing
⚙️ Configuration flags, environment variables, dynamic configuration
🩺 Operations guide monitoring, healing, upgrades, backup, troubleshooting
🔐 Security policies, sharing, access rules, TLS, KMS
🌍 Distributions and cache custom domains, with a complete tutorial
🎬 Video and images HLS streaming, stream links and the media worker: renditions, posters, thumbnails and images in every format
🔒 Video protection encrypted streams, playback tokens, Nexo-player-only mode, visible and forensic watermarks, the JavaScript SDK for web pages and backends
📘 Reference CLI, Admin API, S3 compatibility

make docs-site publishes it as a static site with MkDocs (in bin/site, in English and in Italian under /it/).

Project documents (architecture, design, roadmap, test plan)
# Document Contents
1 Architecture Components, repository layout, stack, technical choices
2 Features Catalog of the server, dashboard and CLI features, differences from S3
3 Cluster Topology, erasure coding, quorum, distributed locks, healing, expansion
4 API Supported S3 APIs, Admin API, internode RPC
5 Roadmap and tasks Milestones, tasks with IDs, dependencies and acceptance criteria, status
6 Test plan Strategy and test cases for server, CLI, dashboard and cluster
7 Security and operations Threat model, TLS, KMS, observability
8 Modes and release Deployment modes, packaging and release process
9 Presigned URLs, policies and sharing Presigned URLs, POST policies, policies, revocable share links
10 Access, domains and distributions Access rules, domains, distributions behind proxies
11 Per-domain cache Memory/disk cache, per-level policies, invalidation, cluster cache
12 Service architecture Binding convention for services, routes and composition in internal/app

The changes of every release are in the CHANGELOG; the test coverage of every feature in the catalog is in the traceability matrix.

🛠️ Development

You need Go (the version in go.mod) and, for the console, Node.js.

Make targets
Command What it runs
make build React console and the bin/nexo and bin/nexoctl binaries with the console embedded (make build-go: Go only)
make test / make test-race Go tests (unit and in-process integration in the three modes)
make test-integration S3/IAM/presigned integration suite in every mode, slow tests included
make test-cluster cluster tests with 4 real bin/nexo processes (kill, pause, restart)
make test-s3compat Ceph s3-tests compatibility suite
make lint / make web-lint / make web-test / make e2e Go lint, console lint and tests, Playwright
make run-cluster local cluster of 4 processes with S3 on 127.0.0.1:9101, 9103, 9105, 9107 and the console on the next port (Linux)
make docs / make docs-check CLI reference in docs/user/cli
make traceability / make traceability-check feature → test matrix in test/TRACEABILITY.md
make security govulncheck, gosec and npm audit
make bench / make bench-media warp benchmarks of the server in every mode / benchmarks of the video and image pipeline (docs/bench)
make build-media-worker / make docker-media-worker the bin/nexo-media-worker binary / its image
make zap-scan authenticated OWASP ZAP active scan of the Admin API from api/openapi.yaml against bin/nexo (needs Java; test/security/zap-api-scan.sh)
make screenshots regenerates the console screenshots in docs/images/screenshots from a seeded demo deployment (Playwright; scripts/screenshots)
make dco the sign-off check of the pull requests on the commits of the branch (CONTRIBUTING.md)
make help all the targets

The code follows the convention of docs/12: every service has an interface and an unexported implementation, and composition happens only in internal/app. Contributions are welcome: see CONTRIBUTING.md.

✉️ Contact

Questions, commercial licenses, partnerships: paolorusso1991@gmail.com. Security problems: see SECURITY.md.

📄 License

Nexo is free software licensed under the GNU Affero General Public License v3.0 only (AGPL-3.0-only): if you modify it and let users interact with it over a network, you must offer them the source code of your version. The NOTICE file adds attribution terms (AGPL section 7(b)): keep it, and keep "Powered by Nexo (https://github.com/R3n3r0/Nexo)" in the legal notices of the user interface. Organizations that cannot comply with the AGPL can buy a commercial license from the copyright holder; contributions are accepted under the terms of CONTRIBUTING.md. Archives, deb/rpm packages, container images and the Helm chart carry LICENSE (and NOTICE in archives and packages).

Directories

Path Synopsis
cmd
nexo command
Command nexo is the Nexo object storage server.
Command nexo is the Nexo object storage server.
nexo-media-worker command
Command nexo-media-worker processes the media jobs of Nexo: it derives the renditions, the poster and the thumbnails of the videos selected by the media rules of the buckets, encoding H.264 with OpenH264 (the Cisco build, downloaded at the first start) and reading and writing the objects through the S3 API only.
Command nexo-media-worker processes the media jobs of Nexo: it derives the renditions, the poster and the thumbnails of the videos selected by the media rules of the buckets, encoding H.264 with OpenH264 (the Cisco build, downloaded at the first start) and reading and writing the objects through the S3 API only.
nexoctl command
Command nexoctl is the Nexo command-line client.
Command nexoctl is the Nexo command-line client.
tools/traceability command
Command traceability writes the traceability matrix of docs/06 §6.8 (test/TRACEABILITY.md): every feature of the catalog with the tests that cover it.
Command traceability writes the traceability matrix of docs/06 §6.8 (test/TRACEABILITY.md): every feature of the catalog with the tests that cover it.
internal
app
Package app composes the Nexo server: it wires service implementations to their interfaces according to the configuration and the detected deployment mode, builds the S3 and console HTTP servers and runs them as a lifecycle.Group.
Package app composes the Nexo server: it wires service implementations to their interfaces according to the configuration and the detected deployment mode, builds the S3 and console HTTP servers and runs them as a lifecycle.Group.
cli
Package cli holds the nexoctl building blocks used by the cobra commands (internal/cli/commands): the alias configuration store and service, the S3Client contract with its aws-sdk-go-v2 implementation, the parsing of targets, sizes and durations, the transfer engine of cp, mv, mirror and rm, the anonymous access presets and the output helpers (tables, JSON Lines, progress bar, stable exit codes).
Package cli holds the nexoctl building blocks used by the cobra commands (internal/cli/commands): the alias configuration store and service, the S3Client contract with its aws-sdk-go-v2 implementation, the parsing of targets, sizes and durations, the transfer engine of cp, mv, mirror and rm, the anonymous access presets and the output helpers (tables, JSON Lines, progress bar, stable exit codes).
cli/clitest
Package clitest provides the test doubles of the nexoctl commands: MemS3 is an in-memory S3 store that drives the generated mock of cli.S3Client with RunAndReturn (docs/12 §12.2 rule 8: no hand-written fake of an interface that has a mock; the shared state is modeled on the mock).
Package clitest provides the test doubles of the nexoctl commands: MemS3 is an in-memory S3 store that drives the generated mock of cli.S3Client with RunAndReturn (docs/12 §12.2 rule 8: no hand-written fake of an interface that has a mock; the shared state is modeled on the mock).
cli/commands
Package commands holds the cobra commands of nexoctl (docs/02 §2.3).
Package commands holds the cobra commands of nexoctl (docs/02 §2.3).
clock
Package clock abstracts time so that services can be tested deterministically.
Package clock abstracts time so that services can be tested deterministically.
config
Package config holds the static server configuration: the settings read once at startup from command-line flags, NEXO_* environment variables and an optional JSON file, with precedence flags > env > file > defaults.
Package config holds the static server configuration: the settings read once at startup from command-line flags, NEXO_* environment variables and an optional JSON file, with precedence flags > env > file > defaults.
domain
Package domain holds the types and sentinel errors shared by every Nexo service and transport.
Package domain holds the types and sentinel errors shared by every Nexo service and transport.
lifecycle
Package lifecycle defines the start/stop contract of long-running components and a Group that manages them in order.
Package lifecycle defines the start/stop contract of long-running components and a Group that manages them in order.
mediaworker/imaging
Package imaging derives the variants of an image for the media worker: it decodes JPEG, PNG, GIF (first frame), WebP, BMP, TIFF, AVIF and HEIC (recognized by their content, not their name), converts it to sRGB from the color space it declares (ICC profile, nclx or cICP code points, PNG gAMA and cHRM: color.go), turns it upright (EXIF orientation of JPEG, TIFF, PNG and WebP, irot/imir of AVIF and HEIC), resizes it with area averaging on premultiplied alpha, and encodes AVIF, WebP, JPEG and PNG variants in parallel, in sRGB and without any metadata of the source (no EXIF, no GPS position, no ICC profile).
Package imaging derives the variants of an image for the media worker: it decodes JPEG, PNG, GIF (first frame), WebP, BMP, TIFF, AVIF and HEIC (recognized by their content, not their name), converts it to sRGB from the color space it declares (ICC profile, nclx or cICP code points, PNG gAMA and cHRM: color.go), turns it upright (EXIF orientation of JPEG, TIFF, PNG and WebP, irot/imir of AVIF and HEIC), resizes it with area averaging on premultiplied alpha, and encodes AVIF, WebP, JPEG and PNG variants in parallel, in sRGB and without any metadata of the source (no EXIF, no GPS position, no ICC profile).
mediaworker/openh264
Package openh264 binds the Cisco OpenH264 library (BSD licensed) at run time, without cgo: the media worker decodes H.264 and encodes H.264 (Constrained Baseline) with it, so no ffmpeg is needed.
Package openh264 binds the Cisco OpenH264 library (BSD licensed) at run time, without cgo: the media worker decodes H.264 and encodes H.264 (Constrained Baseline) with it, so no ffmpeg is needed.
mediaworker/resample
Package resample resizes planes of 8-bit samples, one channel (the planes of a YCbCr picture) or four interleaved (RGBA): area averaging when reducing, linear when enlarging.
Package resample resizes planes of 8-bit samples, one channel (the planes of a YCbCr picture) or four interleaved (RGBA): area averaging when reducing, linear when enlarging.
mediaworker/speech
Package speech is the speech side of the media worker: it transcribes the audio of the videos with an OpenAI-compatible transcription service (OpenAI, whisper.cpp server, faster-whisper-server...) and translates the transcriptions with LibreTranslate or an OpenAI-compatible chat completion service.
Package speech is the speech side of the media worker: it transcribes the audio of the videos with an OpenAI-compatible transcription service (OpenAI, whisper.cpp server, faster-whisper-server...) and translates the transcriptions with LibreTranslate or an OpenAI-compatible chat completion service.
mediaworker/transcode
Package transcode derives the outputs of a video for the media worker: lower-quality renditions (H.264 Constrained Baseline with the source audio copied), a poster frame and a timeline thumbnail sprite.
Package transcode derives the outputs of a video for the media worker: lower-quality renditions (H.264 Constrained Baseline with the source audio copied), a poster frame and a timeline thumbnail sprite.
mediaworker/worker
Package worker runs the jobs of the media worker: it receives them from the media_worker target of Nexo, keeps them in a queue on disk until they are done, and processes them through the S3 API only (no internal RPC, no admin rights): it reads the video, writes the renditions, the poster and the thumbnails into the sidecar directory of its version, and the status.json Nexo reads to serve them.
Package worker runs the jobs of the media worker: it receives them from the media_worker target of Nexo, keeps them in a queue on disk until they are done, and processes them through the S3 API only (no internal RPC, no admin rights): it reads the video, writes the renditions, the poster and the thumbnails into the sidecar directory of its version, and the status.json Nexo reads to serve them.
service
Package service groups the Nexo services: one sub-package per service, each with its contract in service.go, an unexported implementation created by New(deps, opts...) and a generated mock in mock/ (docs/12-service-architecture.md).
Package service groups the Nexo services: one sub-package per service, each with its contract in service.go, an unexported implementation created by New(deps, opts...) and a generated mock in mock/ (docs/12-service-architecture.md).
service/accessrule
Package accessrule manages the access rules of the buckets (docs/10 §10.1): rules with a priority, an effect, principals, actions, a key pattern (prefix, glob or RE2 regex, internal/service/match) and conditions, stored in the bucket metadata and evaluated by the policy engine as a resource-based source next to the bucket policy (Evaluator implements policy.AccessRules).
Package accessrule manages the access rules of the buckets (docs/10 §10.1): rules with a priority, an effect, principals, actions, a key pattern (prefix, glob or RE2 regex, internal/service/match) and conditions, stored in the bucket metadata and evaluated by the policy engine as a resource-based source next to the bucket policy (Evaluator implements policy.AccessRules).
service/admin
Package admin is the facade used by the Admin API and the CLI for server-wide operations (information, data usage, healing, service control) and the home of the business rules of the console that span several domain services:
Package admin is the facade used by the Admin API and the CLI for server-wide operations (information, data usage, healing, service control) and the home of the business rules of the console that span several domain services:
service/audit
Package audit records who did what (S-OPS-06, docs/05 T-8.4): one Entry per request served by the S3 API and the Admin API (identity, operation, resource, client, outcome, latency, request id, node, sizes), written to the structured log of the server, kept in memory for the searches of the console (D-MON-03, aggregated over the nodes of a cluster) and delivered to the audit targets of the dynamic configuration (audit_webhook, audit_kafka), each with the persistent queue of the notification targets (internal/service/event).
Package audit records who did what (S-OPS-06, docs/05 T-8.4): one Entry per request served by the S3 API and the Admin API (identity, operation, resource, client, outcome, latency, request id, node, sizes), written to the structured log of the server, kept in memory for the searches of the console (D-MON-03, aggregated over the nodes of a cluster) and delivered to the audit targets of the dynamic configuration (audit_webhook, audit_kafka), each with the persistent queue of the notification targets (internal/service/event).
service/auth
Package auth defines request authentication: AWS Signature V4 for headers, presigned query strings, streaming aws-chunked payloads (signed chunks, unsigned chunks with trailers) and POST policies, plus the signer that produces signed requests, presigned URLs and POST policy forms.
Package auth defines request authentication: AWS Signature V4 for headers, presigned query strings, streaming aws-chunked payloads (signed chunks, unsigned chunks with trailers) and POST policies, plus the signer that produces signed requests, presigned URLs and POST policy forms.
service/bucket
Package bucket manages bucket metadata: versioning, policy, lifecycle, object lock, encryption, quota, tags, CORS and notification configuration.
Package bucket manages bucket metadata: versioning, policy, lifecycle, object lock, encryption, quota, tags, CORS and notification configuration.
service/cache
Package cache implements the HTTP cache of the distributions (docs/11): reusable cache policies inherited from the cluster to the distribution, the domain and the behavior; a memory tier (W-TinyLFU) and an optional disk tier with quotas per cluster, distribution and domain; the invalidations, automatic on every write of the object layer and manual (paths, patterns, tags, domains, everything, soft or hard), propagated to every node with a sequence number; the shared mode of a cluster, where a key has an owner node chosen by rendezvous hashing; the purge webhooks of the CDNs and proxies in front of the cluster; the warm-up, the inspector and the statistics.
Package cache implements the HTTP cache of the distributions (docs/11): reusable cache policies inherited from the cluster to the distribution, the domain and the behavior; a memory tier (W-TinyLFU) and an optional disk tier with quotas per cluster, distribution and domain; the invalidations, automatic on every write of the object layer and manual (paths, patterns, tags, domains, everything, soft or hard), propagated to every node with a sequence number; the shared mode of a cluster, where a key has an owner node chosen by rendezvous hashing; the purge webhooks of the CDNs and proxies in front of the cluster; the warm-up, the inspector and the statistics.
service/certs
Package certs manages the TLS certificates of the domains of the distributions (docs/10 §10.2 "TLS and per-domain certificates"): the certificates uploaded by the operators (PEM chain and key, validated: chain linkage, key matching the leaf, DNS names, validity) and the ones obtained and renewed with ACME (RFC 8555: Let's Encrypt, ZeroSSL, any ACME CA) through the HTTP-01, the TLS-ALPN-01 or the DNS-01 challenge.
Package certs manages the TLS certificates of the domains of the distributions (docs/10 §10.2 "TLS and per-domain certificates"): the certificates uploaded by the operators (PEM chain and key, validated: chain linkage, key matching the leaf, DNS names, validity) and the ones obtained and renewed with ACME (RFC 8555: Let's Encrypt, ZeroSSL, any ACME CA) through the HTTP-01, the TLS-ALPN-01 or the DNS-01 challenge.
service/certs/dns01
Package dns01 publishes the TXT records of the ACME DNS-01 challenge (RFC 8555 §8.4) in the DNS zones of the distributions and waits for them to be served by the authoritative nameservers of the zone, before the certificate service asks the CA to validate them.
Package dns01 publishes the TXT records of the ACME DNS-01 challenge (RFC 8555 §8.4) in the DNS zones of the distributions and waits for them to be served by the authoritative nameservers of the zone, before the certificate service asks the CA to validate them.
service/cluster
Package cluster holds the services that make the nodes of a deployment one cluster (docs/03 §3.5, §3.9): the startup sequence (Bootstrapper: same topology on every node, quorum of drives per set, coordinated format.json), the broadcast of cache invalidations (Notifier), the aggregated server information and clock checks (Info) and the leader election of the singleton background jobs (Leader).
Package cluster holds the services that make the nodes of a deployment one cluster (docs/03 §3.5, §3.9): the startup sequence (Bootstrapper: same topology on every node, quorum of drives per set, coordinated format.json), the broadcast of cache invalidations (Notifier), the aggregated server information and clock checks (Info) and the leader election of the singleton background jobs (Leader).
service/config
Package config is the dynamic configuration service: key/value settings grouped by subsystem (e.g.
Package config is the dynamic configuration service: key/value settings grouped by subsystem (e.g.
service/crypto
Package crypto is the server-side encryption of the objects (docs/02 S-OBJ-13, docs/05 T-7.5): it seals and unseals the object keys and encrypts the object data in a DARE-like package format.
Package crypto is the server-side encryption of the objects (docs/02 S-OBJ-13, docs/05 T-7.5): it seals and unseals the object keys and encrypts the object data in a DARE-like package format.
service/distribution
Package distribution implements the distributions of docs/10 §10.2: a distribution exposes a bucket (or a prefix of it) on one or more custom domains, in the "website" mode (static sites, downloads: index document, SPA fallback, error pages, redirects, behaviors per path, signed URLs and cookies) or in the "s3" mode (the domain is an S3 endpoint aliasing the bucket).
Package distribution implements the distributions of docs/10 §10.2: a distribution exposes a bucket (or a prefix of it) on one or more custom domains, in the "website" mode (static sites, downloads: index document, SPA fallback, error pages, redirects, behaviors per path, signed URLs and cookies) or in the "s3" mode (the domain is an S3 endpoint aliasing the bucket).
service/erasure
Package erasure implements the Reed-Solomon erasure coding of the object layer and the bitrot protection of the shards it produces.
Package erasure implements the Reed-Solomon erasure coding of the object layer and the bitrot protection of the shards it produces.
service/event
Package event implements bucket notifications (S-BKT-10): S3-format events published by the object layer and the S3 transport, routed by the notification configuration of their bucket (and by the filters of the targets) to the configured targets: webhook, Kafka, NATS, AMQP, Redis and PostgreSQL.
Package event implements bucket notifications (S-BKT-10): S3-format events published by the object layer and the S3 transport, routed by the notification configuration of their bucket (and by the filters of the targets) to the configured targets: webhook, Kafka, NATS, AMQP, Redis and PostgreSQL.
service/heal
Package heal is the healing service of the erasure-coded deployments (docs/03 §3.7): it repairs objects and buckets through the object layer's Healer and reports the state of every drive before and after, drains the MRF queue (the writes that missed a drive and the reads that met damaged data), formats the empty drives found in an existing deployment and heals them completely with a checkpoint that survives restarts (healing.bin), and runs the healing jobs of the Admin API (nexoctl admin heal).
Package heal is the healing service of the erasure-coded deployments (docs/03 §3.7): it repairs objects and buckets through the object layer's Healer and reports the state of every drive before and after, drains the MRF queue (the writes that missed a drive and the reads that met damaged data), formats the empty drives found in an existing deployment and heals them completely with a checkpoint that survives restarts (healing.bin), and runs the healing jobs of the Admin API (nexoctl admin heal).
service/health
Package health exposes liveness, readiness and cluster health checks.
Package health exposes liveness, readiness and cluster health checks.
service/iam
Package iam manages identities: the root user, users, groups, service accounts (access keys with inline policies and expiry) and STS temporary credentials, plus the policies attached to users and groups.
Package iam manages identities: the root user, users, groups, service accounts (access keys with inline policies and expiry) and STS temporary credentials, plus the policies attached to users and groups.
service/idp
Package idp authenticates the users of external identity providers (S-IAM-08, S-IAM-09): the ID tokens of an OpenID Connect provider (AssumeRoleWithWebIdentity and the SSO login of the console, with the authorization code flow and PKCE) and the passwords of an LDAP directory (AssumeRoleWithLDAPIdentity and the console login).
Package idp authenticates the users of external identity providers (S-IAM-08, S-IAM-09): the ID tokens of an OpenID Connect provider (AssumeRoleWithWebIdentity and the SSO login of the console, with the authorization code flow and PKCE) and the passwords of an LDAP directory (AssumeRoleWithLDAPIdentity and the console login).
service/ilm
Package ilm implements the bucket lifecycle (S-BKT-07, docs/05 T-7.3): the LifecycleConfiguration documents of S3 (parsing and validation), their evaluation against the versions of a key and the in-progress multipart uploads with an injected clock (Expiration, expired object delete markers, NoncurrentVersionExpiration, AbortIncompleteMultipartUpload, Transition and NoncurrentVersionTransition to the remote tiers of S-STO-12), and their application: by the background scanner, which hands every version to the service (scanner.Lifecycle), or on demand (ApplyNow).
Package ilm implements the bucket lifecycle (S-BKT-07, docs/05 T-7.3): the LifecycleConfiguration documents of S3 (parsing and validation), their evaluation against the versions of a key and the in-progress multipart uploads with an injected clock (Expiration, expired object delete markers, NoncurrentVersionExpiration, AbortIncompleteMultipartUpload, Transition and NoncurrentVersionTransition to the remote tiers of S-STO-12), and their application: by the background scanner, which hands every version to the service (scanner.Lifecycle), or on demand (ApplyNow).
service/kms
Package kms is the key management service of the server-side encryption (docs/07 §7.2, docs/05 T-7.5).
Package kms is the key management service of the server-side encryption (docs/07 §7.2, docs/05 T-7.5).
service/lock
Package lock defines the namespace locking used to serialize access to buckets and objects.
Package lock defines the namespace locking used to serialize access to buckets and objects.
service/logs
Package logs is the log stream of the server (S-OPS-07, docs/05 T-8.3): the slog handler of the process is a tee (Service.Handler) that writes the records to the output of the server (JSON or text, with a level and a format changed at runtime by the "logger" subsystem of the dynamic configuration, Configurator) and keeps them in a ring buffer of recent entries that the subscribers (the console, the CLI) receive live, from every node of the cluster (Peer).
Package logs is the log stream of the server (S-OPS-07, docs/05 T-8.3): the slog handler of the process is a tee (Service.Handler) that writes the records to the output of the server (JSON or text, with a level and a format changed at runtime by the "logger" subsystem of the dynamic configuration, Configurator) and keeps them in a ring buffer of recent entries that the subscribers (the console, the CLI) receive live, from every node of the cluster (Peer).
service/match
Package match compiles and evaluates the key patterns of the access rules (docs/10 §10.1) and of the distribution behaviors (§10.2): literal prefixes, globs and RE2 regular expressions, matched against keys normalized so that an encoding never bypasses a rule.
Package match compiles and evaluates the key patterns of the access rules (docs/10 §10.1) and of the distribution behaviors (§10.2): literal prefixes, globs and RE2 regular expressions, matched against keys normalized so that an encoding never bypasses a rule.
service/media
Package media serves the MP4 videos of the object layer as HLS presentations: the playlists and the fMP4 (CMAF) segments are built on request from byte ranges of the object, without decoding or re-encoding it (docs/proposals/video-streaming.md).
Package media serves the MP4 videos of the object layer as HLS presentations: the playlists and the fMP4 (CMAF) segments are built on request from byte ranges of the object, without decoding or re-encoding it (docs/proposals/video-streaming.md).
service/metrics
Package metrics is the metrics registry of a node.
Package metrics is the metrics registry of a node.
service/object
Package object defines the object layer: the logical S3 API over buckets, objects, versions and multipart uploads.
Package object defines the object layer: the logical S3 API over buckets, objects, versions and multipart uploads.
service/playback
Package playback issues and checks the playback tokens of the videos (docs/proposals/video-protection.md): a token is a capability to stream one video, signed by the deployment, that an application hands to a viewer without credentials.
Package playback issues and checks the playback tokens of the videos (docs/proposals/video-protection.md): a token is a capability to stream one video, signed by the deployment, that an application hands to a viewer without credentials.
service/policy
Package policy is the policy engine: parsing and validation of AWS-format policy documents, evaluation of IAM policies, group policies, inline (session) policies and bucket policies, the policy simulator, the simplified anonymous-access presets and the store of named IAM policies with their attachments to users and groups.
Package policy is the policy engine: parsing and validation of AWS-format policy documents, evaluation of IAM policies, group policies, inline (session) policies and bucket policies, the policy simulator, the simplified anonymous-access presets and the store of named IAM policies with their attachments to users and groups.
service/pools
Package pools runs the decommission of a server pool and the rebalance between pools (docs/03 §3.8) on top of object.PoolMover.
Package pools runs the decommission of a server pool and the rebalance between pools (docs/03 §3.8) on top of object.PoolMover.
service/preflight
Package preflight validates the configuration of a node without starting anything nor writing to its drives: the checks of "nexo server --dry-run" (docs/08 §8.3, TM-12).
Package preflight validates the configuration of a node without starting anything nor writing to its drives: the checks of "nexo server --dry-run" (docs/08 §8.3, TM-12).
service/quota
Package quota enforces the hard quotas of the buckets (docs/02 S-BKT-09, docs/05 T-7.7).
Package quota enforces the hard quotas of the buckets (docs/02 S-BKT-09, docs/05 T-7.7).
service/ratelimit
Package ratelimit is the request rate limiter of a node (S-OPS-10, S-DST-08): token buckets keyed by client address, access key or user, bucket and distribution, and the concurrency limit of the S3 API (api.requests_max, api.requests_deadline).
Package ratelimit is the request rate limiter of a node (S-OPS-10, S-DST-08): token buckets keyed by client address, access key or user, bucket and distribution, and the concurrency limit of the S3 API (api.requests_max, api.requests_deadline).
service/replication
Package replication replicates the versions of a bucket to buckets of other deployments (S-BKT-12, docs/03 §3.10): asynchronously, by the rules of the ReplicationConfiguration of the bucket, to replication targets (a remote S3 endpoint, its credentials and its bucket, sealed in the system store and named by an ARN the rules point to).
Package replication replicates the versions of a bucket to buckets of other deployments (S-BKT-12, docs/03 §3.10): asynchronously, by the rules of the ReplicationConfiguration of the bucket, to replication targets (a remote S3 endpoint, its credentials and its bucket, sealed in the system store and named by an ARN the rules point to).
service/s3select
Package s3select evaluates the SQL queries of SelectObjectContent (S-OBJ-16) over the content of an object: CSV or JSON records, plain or compressed with GZIP or BZIP2, filtered and projected by a subset of the S3 Select SQL, written as CSV or JSON records.
Package s3select evaluates the SQL queries of SelectObjectContent (S-OBJ-16) over the content of an object: CSV or JSON records, plain or compressed with GZIP or BZIP2, filtered and projected by a subset of the S3 Select SQL, written as CSV or JSON records.
service/scanner
Package scanner is the background scanner (docs/03 §3.7): a continuous cycle over every bucket and object of the deployment that computes the data usage (per bucket and per top-level prefix: objects, versions, delete markers, bytes) saved in .nexo.sys/usage.json and served to the Admin API, heals a sample of the objects (one every N, with a deep bitrot verification every M cycles), aborts the stale multipart uploads and hands every version to the lifecycle hook (ILM, M7).
Package scanner is the background scanner (docs/03 §3.7): a continuous cycle over every bucket and object of the deployment that computes the data usage (per bucket and per top-level prefix: objects, versions, delete markers, bytes) saved in .nexo.sys/usage.json and served to the Admin API, heals a sample of the objects (one every N, with a deep bitrot verification every M cycles), aborts the stale multipart uploads and hands every version to the lifecycle hook (ILM, M7).
service/session
Package session manages console sessions: login with access/secret key yields a signed token stored by the transport in an HttpOnly cookie, plus a CSRF token, bound to the session, the browser sends back in a header.
Package session manages console sessions: login with access/secret key yields a signed token stored by the transport in an HttpOnly cookie, plus a CSRF token, bound to the session, the browser sends back in a header.
service/settings
Package settings applies the dynamic configuration (config.Service) to the server: it reads the subsystems the server honors at every call, so that a change written through the Admin API takes effect on the next request without a restart (hot reload), and it decorates the services whose behavior depends on them.
Package settings applies the dynamic configuration (config.Service) to the server: it reads the subsystems the server honors at every call, so that a change written through the Admin API takes effect on the next request without a restart (hot reload), and it decorates the services whose behavior depends on them.
service/share
Package share manages revocable share links (docs/09 §9.1 "Revoking shared links").
Package share manages revocable share links (docs/09 §9.1 "Revoking shared links").
service/siterepl
Package siterepl keeps several deployments in sync (site replication, S-STO-11, docs/03 §3.10): their users, groups, access keys and named policies, their buckets with their settings, and the replication of every bucket to the same bucket of every other site.
Package siterepl keeps several deployments in sync (site replication, S-STO-11, docs/03 §3.10): their users, groups, access keys and named policies, their buckets with their settings, and the replication of every bucket to the same bucket of every other site.
service/storage
Package storage defines StorageAPI, the contract for accessing a single drive: metadata files (xl.meta), data parts and volume (bucket) directories.
Package storage defines StorageAPI, the contract for accessing a single drive: metadata files (xl.meta), data parts and volume (bucket) directories.
service/storage/storagetest
Package storagetest is the behavior suite of storage.StorageAPI.
Package storagetest is the behavior suite of storage.StorageAPI.
service/sysstore
Package sysstore keeps the system documents of a deployment (identities, named policies, dynamic configuration, bucket metadata, share links, session revocations) on the system volume of the drives of the first erasure set (.nexo.sys/config), whatever the deployment mode: the drives are storage.StorageAPI values, local or remote (internode RPC), so that every node of a cluster reads and writes the same documents (docs/03 §3.9: "bucket/IAM metadata: written with quorum").
Package sysstore keeps the system documents of a deployment (identities, named policies, dynamic configuration, bucket metadata, share links, session revocations) on the system volume of the drives of the first erasure set (.nexo.sys/config), whatever the deployment mode: the drives are storage.StorageAPI values, local or remote (internode RPC), so that every node of a cluster reads and writes the same documents (docs/03 §3.9: "bucket/IAM metadata: written with quorum").
service/tier
Package tier manages the remote tiers of the lifecycle (S-STO-12, docs/03 §3.12): S3 buckets of other deployments or of a cloud provider (an endpoint, a bucket, a prefix and credentials sealed in the system store) that the Transition actions of the lifecycle move the data of versions to.
Package tier manages the remote tiers of the lifecycle (S-STO-12, docs/03 §3.12): S3 buckets of other deployments or of a cloud provider (an endpoint, a bucket, a prefix and credentials sealed in the system store) that the Transition actions of the lifecycle move the data of versions to.
service/topology
Package topology parses the server command line into a deployment layout.
Package topology parses the server command line into a deployment layout.
service/trace
Package trace holds the request tracing of the server:
Package trace holds the request tracing of the server:
service/update
Package update orchestrates the binary update and the coordinated restart and stop of a deployment (S-OPS-09, C-ADM-09, docs/03 §3.13).
Package update orchestrates the binary update and the coordinated restart and stop of a deployment (S-OPS-09, C-ADM-09, docs/03 §3.13).
testutil
Package testutil starts Nexo in-process for integration tests: free ports, temporary drive directories and test credentials, in every deployment mode (docs/08 §8.1): a single drive (SNSD), several drives of one node (SNMD, Drives) or a distributed cluster of several nodes running in the test process (StartCluster), each on its own ports, in front of an in-process load balancer.
Package testutil starts Nexo in-process for integration tests: free ports, temporary drive directories and test credentials, in every deployment mode (docs/08 §8.1): a single drive (SNSD), several drives of one node (SNMD, Drives) or a distributed cluster of several nodes running in the test process (StartCluster), each on its own ports, in front of an in-process load balancer.
testutil/dnstest
Package dnstest runs an authoritative DNS server in the tests of the ACME DNS-01 challenge.
Package dnstest runs an authoritative DNS server in the tests of the ACME DNS-01 challenge.
testutil/redaction
Package redaction holds the request every redaction of the server is tested with (the stderr logs, the log stream, the audit, the access logs and the live trace): one table, one predicate (domain.IsSensitiveParam).
Package redaction holds the request every redaction of the server is tested with (the stderr logs, the log stream, the audit, the access logs and the live trace): one table, one predicate (domain.IsSensitiveParam).
tools/traceability
Package traceability builds the traceability matrix of docs/06 §6.8: every feature of the catalog (docs/02-features.md) mapped to the tests that declare to cover it with a "covers:" tag (Go tests, testscript scripts, Vitest and Playwright specs, test scripts).
Package traceability builds the traceability matrix of docs/06 §6.8: every feature of the catalog (docs/02-features.md) mapped to the tests that declare to cover it with a "covers:" tag (Go tests, testscript scripts, Vitest and Playwright specs, test scripts).
transport/http/admin
Package admin implements the Admin API transport (/api/v1): JSON in, JSON out, problem+json errors (RFC 9457) with a stable snake_case code.
Package admin implements the Admin API transport (/api/v1): JSON in, JSON out, problem+json errors (RFC 9457) with a stable snake_case code.
transport/http/console
Package console serves the embedded React dashboard: static assets with long-lived caching, index.html with no-cache and a SPA fallback for every non-API path, plus baseline security headers.
Package console serves the embedded React dashboard: static assets with long-lived caching, index.html with no-cache and a SPA fallback for every non-API path, plus baseline security headers.
transport/http/dist
Package dist is the HTTP transport of the distributions (docs/10 §10.2): the routing of the requests by Host (HostRouter), the website routes (WebsiteRoutes), the HTTP-01 challenges of ACME (ChallengeRoutes), the metrics and the access log of every distribution.
Package dist is the HTTP transport of the distributions (docs/10 §10.2): the routing of the requests by Host (HostRouter), the website routes (WebsiteRoutes), the HTTP-01 challenges of ACME (ChallengeRoutes), the metrics and the access log of every distribution.
transport/http/httpx
Package httpx holds the HTTP helpers shared by every transport: response encoding (XML, JSON, problem+json, S3 errors), the S3 error table, request-id generation and x-amz-* header helpers.
Package httpx holds the HTTP helpers shared by every transport: response encoding (XML, JSON, problem+json, S3 errors), the S3 error table, request-id generation and x-amz-* header helpers.
transport/http/middleware
Package middleware defines the Middleware contract and the cross-cutting HTTP middlewares: request ids, panic recovery, logging, CORS, metrics, authentication and body limits.
Package middleware defines the Middleware contract and the cross-cutting HTTP middlewares: request ids, panic recovery, logging, CORS, metrics, authentication and body limits.
transport/http/s3
Package s3 implements the S3 API transport.
Package s3 implements the S3 API transport.
transport/http/server
Package server implements the HTTP server service: it owns the listener, optional TLS, HTTP/2, graceful shutdown and the chi router on which the registered Routes and Middlewares are mounted.
Package server implements the HTTP server service: it owns the listener, optional TLS, HTTP/2, graceful shutdown and the chi router on which the registered Routes and Middlewares are mounted.
transport/rpc
Package rpc is the internode transport of a distributed deployment (docs/03 §3.4): HTTP/2 on the S3 port under Prefix (cleartext h2c, or TLS when the server has certificates), msgpack bodies, binary streams with framing and checksums for the data, and short-lived HS256 JWTs signed with a key derived from the root credentials and the deployment id.
Package rpc is the internode transport of a distributed deployment (docs/03 §3.4): HTTP/2 on the S3 port under Prefix (cleartext h2c, or TLS when the server has certificates), msgpack bodies, binary streams with framing and checksums for the data, and short-lived HS256 JWTs signed with a key derived from the root credentials and the deployment id.
transport/rpc/rpctest
Package rpctest runs a distributed deployment inside the test process: N nodes on 127.0.0.1 with their own port, drives in a temporary directory, internode RPC over cleartext HTTP/2 and the cluster services (bootstrap, distributed locks, notifier, leader, info) wired like the composition root wires them.
Package rpctest runs a distributed deployment inside the test process: N nodes on 127.0.0.1 with their own port, drives in a temporary directory, internode RPC over cleartext HTTP/2 and the cluster services (bootstrap, distributed locks, notifier, leader, info) wired like the composition root wires them.
version
Package version exposes the build information injected at link time with -ldflags "-X github.com/r3n3r0/nexo/internal/version.Version=...".
Package version exposes the build information injected at link time with -ldflags "-X github.com/r3n3r0/nexo/internal/version.Version=...".
pkg
nexoadmin
Package nexoadmin is the Go client of the Nexo Admin API (/api/v1, documented by api/openapi.yaml).
Package nexoadmin is the Go client of the Nexo Admin API (/api/v1, documented by api/openapi.yaml).
sdk
js
Package jssdk embeds the browser files of the JavaScript SDK of Nexo (sdk/js/src), which the S3 listener serves under /nexo/media/sdk/ for the pages that load it without a bundler.
Package jssdk embeds the browser files of the JavaScript SDK of Nexo (sdk/js/src), which the S3 listener serves under /nexo/media/sdk/ for the pages that load it without a bundler.
test
cluster
Package cluster holds the multi-process cluster tests of Nexo (docs/06 §6.3, TC-*): every test builds a deployment of several bin/nexo processes on 127.0.0.1, each on its own S3 and console ports with its drives in a temporary directory, and drives it through real clients (aws-sdk-go-v2 and the Admin API client) while it stops, pauses, kills and restarts the processes.
Package cluster holds the multi-process cluster tests of Nexo (docs/06 §6.3, TC-*): every test builds a deployment of several bin/nexo processes on 127.0.0.1, each on its own S3 and console ports with its drives in a temporary directory, and drives it through real clients (aws-sdk-go-v2 and the Admin API client) while it stops, pauses, kills and restarts the processes.
compose
Package compose holds the tests of the Docker Compose deployments of deploy/docker (docs/08 §8.6): TM-06 (a container of the cluster stopped under load: no client error) and TM-09 (presigned and share links generated behind the nginx load balancer, downloaded from outside).
Package compose holds the tests of the Docker Compose deployments of deploy/docker (docs/08 §8.6): TM-06 (a container of the cluster stopped under load: no client error) and TM-09 (presigned and share links generated behind the nginx load balancer, downloaded from outside).
proxy
Package proxy holds the tests of Nexo behind several reverse proxies (docs/10 §10.2 "Behind one or more proxies", §10.6 TCD-01..03, docs/11 §11.12 TCC-C-05, docs/09 TPS-19 on the custom domains of the distributions).
Package proxy holds the tests of Nexo behind several reverse proxies (docs/10 §10.2 "Behind one or more proxies", §10.6 TCD-01..03, docs/11 §11.12 TCC-C-05, docs/09 TPS-19 on the custom domains of the distributions).
upgrade
Package upgrade holds the upgrade tests of Nexo (docs/05 T-9.8, docs/06 §6.1): the release under test takes over the drives written by the release before it, and the release before it may take them back.
Package upgrade holds the upgrade tests of Nexo (docs/05 T-9.8, docs/06 §6.1): the release under test takes over the drives written by the release before it, and the release before it may take them back.
Package web embeds the compiled React console into the server binary when built with the "embedui" tag.
Package web embeds the compiled React console into the server binary when built with the "embedui" tag.

Jump to

Keyboard shortcuts

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