monolith README

The project's README from github.com/Y2Z/monolith. As one markdown file: README.md.

monolith build status on GNU/Linux monolith build status on macOS monolith build status on Windows Monolith Actor on Apify

 _____    _____________   __________     ___________________    ___
|     \  /             \ |          |   |                   |  |   |
|      \/       __      \|    __    |   |    ___     ___    |__|   |
|              |  |          |  |   |   |   |   |   |   |          |
|   |\    /|   |__|          |__|   |___|   |   |   |   |    __    |
|   | \__/ |          |\                    |   |   |   |   |  |   |
|___|      |__________| \___________________|   |___|   |___|  |___|

A data hoarder’s dream come true: bundle any web page into a single HTML file. You can finally replace that gazillion of open tabs with a gazillion of .html files stored somewhere on your precious little drive.

Unlike the conventional “Save page as”, monolith not only saves the target document, it embeds CSS, image, and JavaScript assets all at once, producing a single HTML5 document that is a joy to store and share.

If compared to saving websites with wget -mpk, this tool embeds all assets as data URLs and therefore lets browsers render the saved page exactly the way it was on the Internet, even when no network connection is available.


Installation

Using Cargo (cross-platform)

cargo install monolith

Via Homebrew (macOS and GNU/Linux)

brew install monolith

Via Chocolatey (Windows)

choco install monolith

Via Scoop (Windows)

scoop install main/monolith

Via Winget (Windows)

winget install --id=Y2Z.Monolith -e

Via MacPorts (macOS)

sudo port install monolith

Using Snapcraft (GNU/Linux)

snap install monolith

Using Guix (GNU/Linux)

guix install monolith

Using NixPkgs

nix-env -iA nixpkgs.monolith

Using Flox

flox install monolith

Using Pacman (Arch Linux)

pacman -S monolith

Using aports (Alpine Linux)

apk add monolith

Using XBPS Package Manager (Void Linux)

xbps-install -S monolith

Using FreeBSD packages (FreeBSD)

pkg install monolith

Using FreeBSD ports (FreeBSD)

cd /usr/ports/www/monolith/
make install clean

Using pkgsrc (NetBSD, OpenBSD, Haiku, etc)

cd /usr/pkgsrc/www/monolith
make install clean

Using containers

docker build -t y2z/monolith .
sudo install -b dist/run-in-container.sh /usr/local/bin/monolith

From source

Dependencies: libssl, cargo

Install cargo (GNU/Linux) Check if cargo is installed
cargo -v

If cargo is not already installed, install and add it to your existing $PATH (paraphrasing the official installation instructions):

curl https://sh.rustup.rs -sSf | sh
. "$HOME/.cargo/env"

Proceed with installing from source:

git clone https://github.com/Y2Z/monolith.git
cd monolith
make install

Using pre-built binaries (Windows, ARM-based devices, etc)

Every release contains pre-built binaries for Windows, GNU/Linux, as well as platforms with non-standard CPU architecture.


Usage

monolith https://lyrics.github.io/db/P/Portishead/Dummy/Roads/ -o %title%.%timestamp%.html
cat some-site-page.html | monolith -aIiFfcMv -b https://some.site/ - > some-site-page-with-assets.html

Options


Whitelisting and blacklisting domains

Options -d and -B provide control over what domains can be used to retrieve assets from, e.g.:

monolith -I -d example.com -d www.example.com https://example.com -o example-only.html
monolith -I -B -d .googleusercontent.com -d googleanalytics.com -d .google.com https://example.com -o example-no-ads.html

Dynamic content

Monolith doesn't feature a JavaScript engine, hence websites that retrieve and display data after initial load may require usage of additional tools.

For example, Chromium (Chrome) can be used to act as a pre-processor for such pages:

chromium --headless --window-size=1920,1080 --run-all-compositor-stages-before-draw --virtual-time-budget=9000 --incognito --dump-dom https://github.com | monolith - -I -b https://github.com -o github.html

Authentication

monolith https://username:[email protected] -o example-basic-auth.html

Proxies

Please set https_proxy, http_proxy, and no_proxy environment variables.


Apify Actor Usage

Run Monolith Actor on Apify

You can run Monolith in the cloud without installation using the Monolith Actor on Apify free of charge.

echo '{"urls": ["https://news.ycombinator.com/"]}' | apify call -so snshn/monolith
[{
  "url": "https://news.ycombinator.com/",
  "status": "0",
  "kvsUrl": "https://api.apify.com/v2/key-value-stores/of9xNgvpon4elPLbc/records/https___news.ycombinator.com_"
}]

Read more about the Monolith Actor, including how to use it via the Apify UI, API and CLI without installation.


Contributing

Please open an issue if something is wrong, that helps make this project better.


License

To the extent possible under law, the author(s) have dedicated all copyright related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty.

monolith (Y2Z/monolith)

Searching Database…

15.5K ·GitHub
这是什么?Monolith 可以把任意网页打包成一个独立、自包含的 HTML5 文件。它会把 CSS、图片和 JavaScript 以 data URL 的形式嵌入页面,因此即使没有网络连接,页面也能与在线时完全一致地显示。
这是命令行工具、图形界面应用还是库?它是用 Rust 编写的命令行工具兼库。README 记录了带参数的命令行用法,GitHub 简介中也写明可以作为库使用,但 README 中没有描述任何图形界面的操作流程。
我该如何安装并运行 monolith?你可以通过 Cargo、Homebrew、Chocolatey、Scoop、Winget、MacPorts、Snapcraft、Guix、NixPkgs、Pacman 或其他几种操作系统的软件包管理器安装,也可以从源码编译,或直接从 releases 页面下载预编译的二进制文件。
从源码编译之前,需要先安装什么吗?从源码编译需要 libssl 和 Cargo;如果只想要二进制文件,Windows、Linux 和 ARM 设备的预编译版本无需额外安装任何东西。
它能抓取通过 JavaScript 动态加载内容的页面吗?不能。monolith 没有 JavaScript 引擎,因此对于在页面首次加载后才获取并渲染数据的网站,可能需要先用 Chromium 之类的真实浏览器做一步预处理,再进行保存。
它能在哪些操作系统上运行?它可以在 Windows、macOS、Linux 以及多种 BSD 系统上运行,同时也提供适用于 ARM 设备的预编译二进制文件。
这和浏览器的“另存为”功能有什么不同?浏览器的“另存为”会生成一个网页文件,外加一个存放各类资源文件的文件夹;monolith 则把 CSS、图片和 JavaScript 以 data URL 的形式直接嵌入一个独立的 HTML5 文件中,更便于保存和分享。
和用 wget -mpk 镜像网页相比如何?与 wget 把资源保存为独立文件不同,monolith 会把所有内容以 data URL 的形式内联进去,因此即使没有互联网连接,保存下来的页面也能与原页面完全一致地显示。
我能控制资源从哪些域名获取吗?可以。-d 参数用于设置白名单,指定允许获取资源的域名;-B 参数则用于设置黑名单,排除不想要的域名。
能把网页保存为 MHTML 而不是普通 HTML 吗?可以。-m 参数会将结果输出为 MHTML 格式,而不是标准的 HTML5 文件。
What are similar projects?hexyl, ttfx, miller, turbocrypt, just, pytube, eza, spotify-tui
Creator
Y2Z
Size
4.6 MB
Stars
15.5K
Age
9y
Commits · 90 Days