{"id":17687053,"url":"https://github.com/danfuzz/lactoserv","last_synced_at":"2025-04-28T17:19:46.986Z","repository":{"id":136453855,"uuid":"522688950","full_name":"danfuzz/lactoserv","owner":"danfuzz","description":"The milkiest webserver ever.","archived":false,"fork":false,"pushed_at":"2025-04-18T18:46:31.000Z","size":8455,"stargazers_count":19,"open_issues_count":11,"forks_count":0,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-04-28T17:19:32.528Z","etag":null,"topics":["app-backend","javascript","nodejs","webserver"],"latest_commit_sha":null,"homepage":"https://postham.org","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danfuzz.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-08-08T19:57:23.000Z","updated_at":"2025-04-18T18:46:34.000Z","dependencies_parsed_at":"2024-03-18T18:46:43.666Z","dependency_job_id":"f3fb1e09-f5a7-4e91-a9b7-609ff35398ae","html_url":"https://github.com/danfuzz/lactoserv","commit_stats":null,"previous_names":[],"tags_count":68,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danfuzz%2Flactoserv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danfuzz%2Flactoserv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danfuzz%2Flactoserv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danfuzz%2Flactoserv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danfuzz","download_url":"https://codeload.github.com/danfuzz/lactoserv/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251352638,"owners_count":21575865,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["app-backend","javascript","nodejs","webserver"],"created_at":"2024-10-24T10:47:07.326Z","updated_at":"2025-04-28T17:19:46.967Z","avatar_url":"https://github.com/danfuzz.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"`lactoserv` Web Application Server\n==================================\n\n[![Build](https://github.com/danfuzz/lactoserv/actions/workflows/main.yml/badge.svg)](https://github.com/danfuzz/lactoserv/actions/workflows/main.yml)\n\nSee also:\n* Documentation:\n  * [`doc` directory](./doc), notably:\n    * [Configuration Guide](./doc/configuration/README.md)\n    * [Deployment Guide](./doc/deployment.md)\n    * [Development Guide](./doc/development.md)\n    * [**Quick Start Guide**](./doc/quick-start.md)\n* [Recent Changes](./CHANGELOG.md)\n* [Stable Releases](./RELEASES.md)\n\n- - - - - - - - - -\n\n**Lactoserv is a standalone \"batteries included\" web application server written\nin JavaScript using Node, and first published in 2023. It serves requests based\non configured components (applications and services), a bunch of which are\nbundled with it in order to cover many common use cases. It also includes a\ntoolkit for defining new components. Because of the rich set of bundled\ncomponents, it can be used productively \"out of the box\" without any programming\nbeyond defining a configuration file.**\n\nLactoserv is also intended as a foundation for prototyping high-level operating\nsystem services. \u003ci\u003eWatch this space!\u003c/i\u003e\n\nAnd, though not the main point of it, Lactoserv is a deployable experiment to\nsee just how far one can go in terms of directly serving network traffic\n(specifically HTTP-ish protocols) in Node, with minimal intermediation. It is\nactively run in production on a small number of public-facing websites.\n\n\n### Features\n\n* Networking:\n  * Can run multiple network endpoints, each serving a different application or\n    set thereof.\n  * Can serve all of HTTP, HTTPS, and HTTP2. (HTTP2 will automatically downgrade\n    to HTTPS for clients that can't do HTTP2.)\n  * Optional rate limiting \u0026mdash; for connections, requests, and sent data\n    (bytes / bandwidth) \u0026mdash; based on the classic \"token bucket\" / \"leaky\n    bucket\" strategy.\n* JS-based configuration file format, which isn't actually that awful!\n* Several built-in applications, including:\n  * A bunch of request routing and filtering applications, to cover the most\n    common needs.\n  * Three \"leaf\" applications, for regular content responses and redirection.\n  * More to come!\n* Several built-in services, including:\n  * Access logging (that is, network request \"access logs\" in the usual sense),\n    in a recognizable standard-ish form.\n  * Detailed system activity logging, in a couple of different formats.\n* The ability to define custom applications and services, using a modern\n  promise-based application framework. Instead of directly dealing with the\n  quirky core Node request and response objects, this framework exposes a\n  friendlier and more approachable API. Maximum ergonomics: Very straightforward\n  application logic bottoms out at a well-tested low-level implementation.\n\n### Implementation features\n\n* Written in pure JavaScript (per se), running on Node. (The only platform\n  native code is from Node, not from this codebase nor from any imported\n  modules.)\n  * Uses Node's standard library for low-level networking and protocol\n    implementation (TCP, TLS, HTTP*).\n  * Only sparingly uses external module dependencies (via `npm`).\n  * Notably, does _not_ depend on any other web application framework (Express,\n    Fastify, etc.).\n* Designed to be installed straightforwardly as a normal POSIX-ish service or\n  via `systemd` (though _without_ Node bundled into the installation).\n* Developed using automated unit and integration tests. (As of this writing,\n  test coverage stats indicate _decent_ but not _outstanding_ coverage.)\n\n### Requirements\n\nTo build:\n* Standard-ish POSIX command-line environment. (It is known to build on recent\n  versions of macOS and at least one flavor of Linux. It _might_ build on\n  Windows, but if it does nobody has told anyone on the project.)\n* Recent-ish version of Bash (works with what macOS ships, which is about as\n  old a version as you'll find on any up-to-date OS).\n* Node v20 or later (tested regularly on v20 and v23).\n* Recent version of `jq` (v1.6 or later).\n\nTo run (versions as above):\n* Standard-ish POSIX operating environment.\n* Recent-ish version of Bash.\n* Node v20 or later. This is required because the project uses:\n  * The relatively new `/v` flag on regular expressions, which became available\n    as of v20.\n  * The module `inspector/promises` (for heap dumps), which became available as\n    of v19.\n\n### Organization\n\nLactoserv is a project of the [Postham](https://postham.org/) organization.\n\n- - - - - - - - - -\n```\nCopyright 2022-2025 the Lactoserv Authors (Dan Bornstein et alia).\nSPDX-License-Identifier: Apache-2.0\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanfuzz%2Flactoserv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanfuzz%2Flactoserv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanfuzz%2Flactoserv/lists"}