aboutsummaryrefslogtreecommitdiff
path: root/dist
diff options
context:
space:
mode:
Diffstat (limited to 'dist')
-rw-r--r--dist/index.html1131
1 files changed, 1131 insertions, 0 deletions
diff --git a/dist/index.html b/dist/index.html
new file mode 100644
index 0000000..905e90a
--- /dev/null
+++ b/dist/index.html
@@ -0,0 +1,1131 @@
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>Mling CLI — Download</title>
+ <link
+ rel="icon"
+ type="image/png"
+ href="../docs/res/favicon_small.png"
+ />
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
+ <link
+ href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;600;700&family=JetBrains+Mono:wght@400;600&display=swap"
+ rel="stylesheet"
+ />
+ <link
+ rel="stylesheet"
+ href="../docs/scripts/highlight/github-dark.min.css"
+ />
+ <style>
+ *,
+ *::before,
+ *::after {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+ }
+
+ html {
+ scroll-behavior: smooth;
+ scroll-snap-type: y mandatory;
+ }
+
+ .hero,
+ .section {
+ scroll-snap-align: start;
+ scroll-snap-stop: always;
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ }
+
+ body {
+ font-family: "Noto Serif SC", Georgia, "Times New Roman", serif;
+ background-color: #1a1410;
+ color: #e8ddd0;
+ line-height: 1.6;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ overflow-x: hidden;
+ }
+
+ a {
+ color: #d4a84b;
+ text-decoration: none;
+ transition: color 0.2s;
+ }
+ a:hover {
+ color: #e8c46a;
+ }
+
+ .container {
+ max-width: 1080px;
+ margin: 0 auto;
+ padding: 0 1.5rem;
+ }
+
+ nav {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: 100;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0.8rem 2rem;
+ background: rgba(26, 20, 16, 0.88);
+ backdrop-filter: blur(12px);
+ -webkit-backdrop-filter: blur(12px);
+ border-bottom: 1px solid rgba(212, 168, 75, 0.12);
+ }
+
+ nav .logo {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ font-weight: 700;
+ font-size: 1.1rem;
+ color: #e8ddd0;
+ }
+
+ nav .logo img {
+ width: 28px;
+ height: 28px;
+ filter: brightness(0) invert(1);
+ }
+
+ nav .nav-links {
+ display: flex;
+ gap: 1.5rem;
+ align-items: center;
+ font-size: 0.9rem;
+ }
+
+ nav .nav-links a {
+ color: #9a8a7a;
+ transition: color 0.2s;
+ }
+
+ nav .nav-links a:hover {
+ color: #d4a84b;
+ }
+
+ nav .nav-links .btn-nav {
+ display: inline-block;
+ padding: 0.35rem 1rem;
+ border: 1px solid #d4a84b;
+ border-radius: 20px;
+ color: #d4a84b;
+ font-weight: 600;
+ font-size: 0.85rem;
+ transition:
+ background 0.2s,
+ color 0.2s;
+ }
+
+ nav .nav-links .btn-nav:hover {
+ background: #d4a84b;
+ color: #1a1410;
+ }
+
+ .hero {
+ padding: 5rem 1.5rem 3rem;
+ text-align: center;
+ position: relative;
+ }
+
+ .hero h1,
+ .hero .subtitle {
+ position: relative;
+ z-index: 1;
+ }
+
+ /* Tiled grid background (field grid) */
+ .hero::after {
+ content: "";
+ position: absolute;
+ inset: 0;
+ background-image:
+ linear-gradient(
+ to right,
+ rgba(212, 168, 75, 0.03) 1px,
+ transparent 1px
+ ),
+ linear-gradient(
+ to bottom,
+ rgba(212, 168, 75, 0.03) 1px,
+ transparent 1px
+ ),
+ linear-gradient(
+ to right,
+ rgba(212, 168, 75, 0.015) 1px,
+ transparent 1px
+ ),
+ linear-gradient(
+ to bottom,
+ rgba(212, 168, 75, 0.015) 1px,
+ transparent 1px
+ );
+ background-size:
+ 40px 40px,
+ 40px 40px,
+ 20px 20px,
+ 20px 20px;
+ background-position:
+ calc(50% - 540px + 20px) 0,
+ calc(50% - 540px) 0,
+ calc(50% - 540px + 10px) 0,
+ calc(50% - 540px + 10px) 0;
+ pointer-events: none;
+ z-index: 0;
+ }
+
+ .hero h1 {
+ font-size: 5.5rem;
+ font-weight: 700;
+ color: #e8ddd0;
+ margin-bottom: 0.75rem;
+ }
+
+ .hero .subtitle {
+ font-size: 1.1rem;
+ color: #9a8a7a;
+ max-width: 640px;
+ margin: 0 auto 2.5rem;
+ line-height: 1.8;
+ text-align: left;
+ }
+
+ .hero .subtitle .star {
+ color: #c43931;
+ margin-right: 0.5rem;
+ }
+
+ .hero .subtitle b {
+ color: #e8ddd0;
+ font-weight: 700;
+ }
+
+ .hero .subtitle code {
+ font-family: "JetBrains Mono", "Noto Serif SC", monospace;
+ font-size: 0.9em;
+ color: #d4a84b;
+ background: rgba(212, 168, 75, 0.08);
+ padding: 0.1rem 0.35rem;
+ border-radius: 2px;
+ }
+
+ /* Hero command carousel terminal */
+ .hero-term {
+ width: 520px;
+ max-width: 100%;
+ margin: 0 auto;
+ background: #0f0b08;
+ border: 1px solid #3a2e24;
+ border-radius: 2.5px;
+ padding: 0.65rem 1.1rem;
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.4);
+ text-align: left;
+ font-family: "JetBrains Mono", "Noto Serif SC", monospace;
+ font-size: 0.95rem;
+ line-height: 1.6;
+ white-space: nowrap;
+ overflow: hidden;
+ position: relative;
+ z-index: 1;
+ }
+
+ .hero-term pre {
+ margin: 0;
+ padding: 0;
+ background: transparent;
+ }
+
+ .hero-term code {
+ font-family: "JetBrains Mono", "Noto Serif SC", monospace;
+ background: transparent !important;
+ padding: 0 !important;
+ }
+
+ .term-prompt {
+ color: #6a5a4a;
+ }
+
+ .term-cmd {
+ color: #7ec699;
+ }
+
+ .term-cursor {
+ display: inline-block;
+ width: 0.6em;
+ height: 1.15em;
+ background: #d0d0d0;
+ vertical-align: text-bottom;
+ margin-left: 1px;
+ animation: termBlink 1s steps(1) infinite;
+ }
+
+ @keyframes termBlink {
+ 50% {
+ opacity: 0;
+ }
+ }
+
+ .download-row {
+ display: flex;
+ gap: 1.25rem;
+ justify-content: center;
+ flex-wrap: wrap;
+ }
+
+ .download-card {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 0.4rem;
+ min-width: 220px;
+ padding: 1.75rem 1.5rem;
+ background: #241c16;
+ border: 1px solid #3a2e24;
+ border-radius: 2px;
+ color: #e8ddd0;
+ transition:
+ border-color 0.25s,
+ transform 0.2s;
+ }
+
+ .download-card:hover {
+ border-color: #d4a84b;
+ color: #e8ddd0;
+ transform: translateY(-4px);
+ }
+
+ .download-card .platform {
+ width: 44px;
+ height: 44px;
+ margin-bottom: 0.25rem;
+ }
+
+ .download-card .platform.invert {
+ filter: brightness(0) invert(1);
+ }
+
+ .download-card .os-name {
+ font-size: 1.05rem;
+ font-weight: 700;
+ }
+
+ .download-card .file-name {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 0.5rem;
+ width: 100%;
+ padding: 0.55rem 0.9rem;
+ background: rgba(212, 168, 75, 0.1);
+ border: 1px solid rgba(212, 168, 75, 0.45);
+ border-radius: 2px;
+ color: #d4a84b;
+ font-family: "JetBrains Mono", monospace;
+ font-size: 0.78rem;
+ text-decoration: none;
+ transition:
+ background 0.2s,
+ color 0.2s,
+ border-color 0.2s;
+ }
+
+ .download-card .file-name:hover {
+ background: #d4a84b;
+ color: #1a1410;
+ border-color: #d4a84b;
+ }
+
+ .download-card .file-name .btn-arrow {
+ flex-shrink: 0;
+ font-size: 0.9rem;
+ }
+
+ .download-card .checksum {
+ font-size: 0.78rem;
+ color: #7a6a5a;
+ }
+
+ .download-card .checksum a {
+ color: #7a6a5a;
+ text-decoration: underline;
+ }
+
+ .download-card .checksum a:hover {
+ color: #d4a84b;
+ }
+
+ .checksum-note {
+ margin: 1.25rem auto 0;
+ width: fit-content;
+ font-size: 0.8rem;
+ color: #6a5a4a;
+ text-align: center;
+ }
+
+ .section {
+ padding: 3.5rem 1.5rem;
+ border-top: 1px solid #2a1e14;
+ }
+
+ .section.alt {
+ background-color: #241c16;
+ }
+
+ .section h2 {
+ font-size: 1.6rem;
+ font-weight: 700;
+ color: #e8ddd0;
+ margin-bottom: 1rem;
+ }
+
+ .section h2::before {
+ content: "✦";
+ color: #c43931;
+ margin-right: 0.5rem;
+ }
+
+ .section h2 span {
+ color: #c43931;
+ }
+
+ .section h3 {
+ font-size: 1.25rem;
+ font-weight: 700;
+ color: #e8ddd0;
+ margin: 0 0 0.75rem;
+ }
+
+ .section h3::before {
+ content: "✦";
+ color: #c43931;
+ margin-right: 0.5rem;
+ }
+
+ .section h3:not(:first-of-type) {
+ margin-top: 2rem;
+ }
+
+ .section p {
+ color: #9a8a7a;
+ margin-bottom: 1.25rem;
+ max-width: 720px;
+ }
+
+ /* Dashed lines along the container edges, excluding hero */
+ body > section:not(.hero) {
+ position: relative;
+ background-image:
+ linear-gradient(
+ to right,
+ rgba(212, 168, 75, 0.03) 1px,
+ transparent 1px
+ ),
+ linear-gradient(
+ to bottom,
+ rgba(212, 168, 75, 0.03) 1px,
+ transparent 1px
+ ),
+ linear-gradient(
+ to right,
+ rgba(212, 168, 75, 0.015) 1px,
+ transparent 1px
+ ),
+ linear-gradient(
+ to bottom,
+ rgba(212, 168, 75, 0.015) 1px,
+ transparent 1px
+ );
+ background-size:
+ 40px 40px,
+ 40px 40px,
+ 20px 20px,
+ 20px 20px;
+ background-position:
+ calc(50% - 540px + 20px) 0,
+ calc(50% - 540px) 0,
+ calc(50% - 540px + 10px) 0,
+ calc(50% - 540px + 10px) 0;
+ }
+
+ body > section:not(.hero)::before,
+ body > section:not(.hero)::after {
+ content: "";
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ width: 1px;
+ background: repeating-linear-gradient(
+ to bottom,
+ rgba(212, 168, 75, 0.25) 0,
+ rgba(212, 168, 75, 0.25) 4px,
+ transparent 4px,
+ transparent 9px
+ );
+ pointer-events: none;
+ z-index: 49;
+ }
+
+ body > section:not(.hero)::before {
+ left: max(0px, calc(50% - 540px));
+ }
+
+ body > section:not(.hero)::after {
+ right: max(0px, calc(50% - 540px));
+ }
+
+ /* Diamond markers at line intersections */
+ .line-diamond {
+ position: absolute;
+ top: -4px;
+ width: 8px;
+ height: 8px;
+ background: rgba(212, 168, 75, 0.25);
+ transform: rotate(45deg);
+ pointer-events: none;
+ z-index: 50;
+ }
+
+ .line-diamond.left {
+ left: calc(max(0px, calc(50% - 540px)) - 4px);
+ }
+
+ .line-diamond.right {
+ right: calc(max(0px, calc(50% - 540px)) - 4px);
+ }
+
+ /* Horizontal dashed dividers between pages */
+ body > section + section,
+ body > footer {
+ border-top: 1px solid rgba(212, 168, 75, 0.25);
+ border-image: repeating-linear-gradient(
+ to right,
+ rgba(212, 168, 75, 0.25) 0 4px,
+ transparent 4px 9px
+ )
+ 1;
+ }
+
+ .code-block {
+ background: #1a1410;
+ border: 1px solid #3a2e24;
+ border-radius: 2px;
+ padding: 1.5rem 1.5rem 1.5rem;
+ overflow-x: auto;
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
+ margin-bottom: 1.5rem;
+ }
+
+ .code-block pre {
+ margin: 0;
+ padding: 0;
+ background: transparent;
+ position: relative;
+ }
+
+ .code-line-highlight {
+ position: absolute;
+ left: 0;
+ right: 0;
+ height: 28px;
+ background: rgba(255, 255, 255, 0.1);
+ border-left: 2px solid rgba(255, 255, 255, 0.45);
+ pointer-events: none;
+ opacity: 0;
+ transition:
+ opacity 0.15s ease,
+ top 0.08s ease;
+ z-index: 3;
+ }
+
+ .code-block code {
+ font-family: "JetBrains Mono", "Noto Serif SC", monospace;
+ font-variant-ligatures: contextual;
+ font-size: 0.85rem;
+ line-height: 1.65;
+ color: #c0b0a0;
+ background: transparent !important;
+ padding: 0 !important;
+ }
+
+ .code-block code .cm {
+ color: #6a5a4a;
+ }
+
+ /* Shell simulator for help output */
+ .shell-term {
+ background: #0f0b08;
+ border: 1px solid #3a2e24;
+ border-radius: 2.5px;
+ padding: 1.5rem 1.75rem;
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.4);
+ overflow-x: auto;
+ overflow-y: auto;
+ max-width: 960px;
+ max-height: 480px;
+ margin: 0 auto;
+ scrollbar-width: none;
+ -ms-overflow-style: none;
+ }
+
+ .shell-term::-webkit-scrollbar {
+ display: none;
+ }
+
+ .shell-term pre {
+ margin: 0;
+ padding: 0;
+ background: transparent;
+ position: relative;
+ }
+
+ .shell-term code {
+ font-family: "JetBrains Mono", "Noto Serif SC", monospace;
+ font-size: 0.85rem;
+ line-height: 1.7;
+ color: #c0b0a0;
+ white-space: pre;
+ display: block;
+ background: transparent !important;
+ padding: 0 !important;
+ }
+
+ .shell-term b {
+ font-weight: 700;
+ color: #e8ddd0;
+ }
+
+ .shell-term i {
+ font-style: italic;
+ }
+
+ .shell-term u {
+ text-decoration: underline;
+ }
+
+ .shell-term .t-cyan {
+ color: #79c0ff;
+ }
+
+ .shell-term .t-green {
+ color: #7ee787;
+ }
+
+ .shell-term .t-heading {
+ background: #e8ddd0;
+ color: #1a1410;
+ font-weight: 700;
+ padding: 0 0.25rem;
+ }
+
+ .shell-term .t-quote {
+ background: #6a5a4a;
+ color: #6a5a4a;
+ }
+
+ footer {
+ padding: 2rem 1.5rem;
+ text-align: center;
+ color: #6a5a4a;
+ font-size: 0.85rem;
+ border-top: 1px solid #2a1e14;
+ }
+
+ footer a {
+ color: #7a6a5a;
+ }
+
+ footer a:hover {
+ color: #d4a84b;
+ }
+
+ @media (max-width: 768px) {
+ html {
+ scroll-snap-type: none;
+ }
+
+ .hero,
+ .section {
+ min-height: auto;
+ }
+
+ nav {
+ padding: 0.8rem 1rem;
+ }
+
+ nav .nav-links {
+ gap: 0.8rem;
+ }
+
+ .hero h1 {
+ font-size: 2rem;
+ }
+
+ .download-card {
+ min-width: 100%;
+ }
+ }
+
+ /* Cursor glow dot */
+ .cursor-dot {
+ position: fixed;
+ pointer-events: none;
+ border-radius: 50%;
+ width: 400px;
+ height: 400px;
+ background: radial-gradient(
+ circle,
+ rgba(212, 168, 75, 0.06) 0%,
+ rgba(212, 168, 75, 0.02) 45%,
+ transparent 70%
+ );
+ transform: translate(-50%, -50%);
+ z-index: 10000;
+ opacity: 0;
+ transition:
+ opacity 0.3s ease,
+ left 0.12s ease-out,
+ top 0.12s ease-out;
+ }
+
+ /* Ink drop effect */
+ .ink-drop {
+ position: fixed;
+ pointer-events: none;
+ border-radius: 50%;
+ background: radial-gradient(
+ circle,
+ rgba(212, 168, 75, 0.15) 0%,
+ rgba(196, 57, 49, 0.06) 50%,
+ transparent 100%
+ );
+ width: 0;
+ height: 0;
+ transform: translate(-50%, -50%);
+ animation: inkSpread 0.9s ease-out forwards;
+ z-index: 9999;
+ }
+
+ @keyframes inkSpread {
+ 0% {
+ width: 0;
+ height: 0;
+ opacity: 1;
+ }
+ 100% {
+ width: 500px;
+ height: 500px;
+ opacity: 0;
+ }
+ }
+ </style>
+ </head>
+
+ <body>
+ <nav>
+ <a href="../" class="logo">
+ <img
+ src="../docs/res/icon.png"
+ alt="Mingling icon"
+ width="28"
+ height="28"
+ />
+ Mìng Lìng
+ </a>
+ <div class="nav-links">
+ <a
+ href="https://github.com/mingling-rs/mingling/tree/main/mingling_cli"
+ target="_blank"
+ >GitHub</a
+ >
+ <a
+ href="https://crates.io/crates/mingling-cli"
+ target="_blank"
+ class="btn-nav"
+ >cargo install mingling-cli</a
+ >
+ </div>
+ </nav>
+
+ <section class="hero">
+ <h1>Mingling CLI</h1>
+ <p class="subtitle">
+ <span class="star">✦</span> <b>Scaffold</b> — generate projects
+ with <code>proj-init</code><br />
+ <span class="star">✦</span> <b>Manage</b> — install, enable, and
+ inspect packages<br />
+ <span class="star">✦</span> <b>Update</b> — <code>mling</code>
+ keeps itself fresh
+ </p>
+ <div class="hero-term">
+ <pre><code class="no-highlight term-hero"></code></pre>
+ </div>
+ </section>
+
+ <section class="section alt">
+ <div class="container">
+ <h2>How to use</h2>
+ <div class="shell-term">
+ <pre><code class="no-highlight" id="shell-help"></code></pre>
+ </div>
+ </div>
+ </section>
+
+ <section class="section">
+ <div class="container">
+ <h2>Download</h2>
+ <p>
+ Choose the package for your platform and download the latest
+ build.
+ </p>
+ <div class="download-row">
+ <div class="download-card">
+ <svg
+ class="platform invert"
+ viewBox="0 0 128 128"
+ xmlns="http://www.w3.org/2000/svg"
+ aria-hidden="true"
+ >
+ <path
+ fill-rule="evenodd"
+ clip-rule="evenodd"
+ d="M113.823 104.595c-1.795-1.478-3.629-2.921-5.308-4.525-1.87-1.785-3.045-3.944-2.789-6.678.147-1.573-.216-2.926-2.113-3.452.446-1.154.864-1.928 1.033-2.753.188-.92.178-1.887.204-2.834.264-9.96-3.334-18.691-8.663-26.835-2.454-3.748-5.017-7.429-7.633-11.066-4.092-5.688-5.559-12.078-5.633-18.981a47.564 47.564 0 00-1.081-9.475C80.527 11.956 77.291 7.233 71.422 4.7c-4.497-1.942-9.152-2.327-13.901-1.084-6.901 1.805-11.074 6.934-10.996 14.088.074 6.885.417 13.779.922 20.648.288 3.893-.312 7.252-2.895 10.34-2.484 2.969-4.706 6.172-6.858 9.397-1.229 1.844-2.317 3.853-3.077 5.931-2.07 5.663-3.973 11.373-7.276 16.5-1.224 1.9-1.363 4.026-.494 6.199.225.563.363 1.429.089 1.882-2.354 3.907-5.011 7.345-10.066 8.095-3.976.591-4.172 1.314-4.051 5.413.1 3.337.061 6.705-.28 10.021-.363 3.555.008 4.521 3.442 5.373 7.924 1.968 15.913 3.647 23.492 6.854 3.227 1.365 6.465.891 9.064-1.763 2.713-2.771 6.141-3.855 9.844-3.859 6.285-.005 12.572.298 18.86.369 1.702.02 2.679.653 3.364 2.199.84 1.893 2.26 3.284 4.445 3.526 4.193.462 8.013-.16 11.19-3.359 3.918-3.948 8.436-7.066 13.615-9.227 1.482-.619 2.878-1.592 4.103-2.648 2.231-1.922 2.113-3.146-.135-5zM62.426 24.12c.758-2.601 2.537-4.289 5.243-4.801 2.276-.43 4.203.688 5.639 3.246 1.546 2.758 2.054 5.64.734 8.658-1.083 2.474-1.591 2.707-4.123 1.868-.474-.157-.937-.343-1.777-.652.708-.594 1.154-1.035 1.664-1.382 1.134-.772 1.452-1.858 1.346-3.148-.139-1.694-1.471-3.194-2.837-3.175-1.225.017-2.262 1.167-2.4 2.915-.086 1.089.095 2.199.173 3.589-3.446-1.023-4.711-3.525-3.662-7.118zm-12.75-2.251c1.274-1.928 3.197-2.314 5.101-1.024 2.029 1.376 3.547 5.256 2.763 7.576-.285.844-1.127 1.5-1.716 2.241l-.604-.374c-.23-1.253-.276-2.585-.757-3.733-.304-.728-1.257-1.184-1.919-1.762-.622.739-1.693 1.443-1.757 2.228-.088 1.084.477 2.28.969 3.331.311.661 1.001 1.145 1.713 1.916l-1.922 1.51c-3.018-2.7-3.915-8.82-1.871-11.909zM87.34 86.075c-.203 2.604-.5 2.713-3.118 3.098-1.859.272-2.359.756-2.453 2.964a101.744 101.744 0 00-.012 7.753c.061 1.77-.537 3.158-1.755 4.393-6.764 6.856-14.845 10.105-24.512 8.926-4.17-.509-6.896-3.047-9.097-6.639.98-.363 1.705-.607 2.412-.894 3.122-1.27 3.706-3.955 1.213-6.277-1.884-1.757-3.986-3.283-6.007-4.892-1.954-1.555-3.934-3.078-5.891-4.629-1.668-1.323-2.305-3.028-2.345-5.188-.094-5.182.972-10.03 3.138-14.747 1.932-4.209 3.429-8.617 5.239-12.885.935-2.202 1.906-4.455 3.278-6.388 1.319-1.854 2.134-3.669 1.988-5.94-.084-1.276-.016-2.562-.016-3.843l.707-.352c1.141.985 2.302 1.949 3.423 2.959 4.045 3.646 7.892 3.813 12.319.67 1.888-1.341 3.93-2.47 5.927-3.652.497-.294 1.092-.423 1.934-.738 2.151 5.066 4.262 10.033 6.375 15 1.072 2.524 1.932 5.167 3.264 7.547 2.671 4.775 4.092 9.813 4.07 15.272-.012 2.83.137 5.67-.081 8.482z"
+ />
+ </svg>
+ <span class="os-name">Linux</span>
+ <a class="file-name" href="./mling-linux.tar.gz"
+ >DOWNLOAD<span class="btn-arrow">↓</span></a
+ >
+ <span class="checksum"
+ ><a href="./mling-linux.tar.gz.sha256"
+ >SHA256</a
+ ></span
+ >
+ </div>
+ <div class="download-card">
+ <svg
+ class="platform invert"
+ viewBox="0 0 128 128"
+ xmlns="http://www.w3.org/2000/svg"
+ aria-hidden="true"
+ >
+ <path
+ d="M126 1.637l-67 9.834v49.831l67-.534zM1.647 66.709l.003 42.404 50.791 6.983-.04-49.057zm56.82.68l.094 49.465 67.376 9.509.016-58.863zM1.61 19.297l.047 42.383 50.791-.289-.023-49.016z"
+ />
+ </svg>
+ <span class="os-name">Windows</span>
+ <a class="file-name" href="./mling-win.tar.gz"
+ >DOWNLOAD<span class="btn-arrow">↓</span></a
+ >
+ <span class="checksum"
+ ><a href="./mling-win.tar.gz.sha256"
+ >SHA256</a
+ ></span
+ >
+ </div>
+ <div class="download-card">
+ <svg
+ class="platform invert"
+ viewBox="0 0 128 128"
+ xmlns="http://www.w3.org/2000/svg"
+ aria-hidden="true"
+ >
+ <path
+ d="M97.905 67.885c.174 18.8 16.494 25.057 16.674 25.137-.138.44-2.607 8.916-8.597 17.669-5.178 7.568-10.553 15.108-19.018 15.266-8.318.152-10.993-4.934-20.504-4.934-9.508 0-12.479 4.776-20.354 5.086-8.172.31-14.395-8.185-19.616-15.724C15.822 94.961 7.669 66.8 18.616 47.791c5.438-9.44 15.158-15.417 25.707-15.571 8.024-.153 15.598 5.398 20.503 5.398 4.902 0 14.106-6.676 23.782-5.696 4.051.169 15.421 1.636 22.722 12.324-.587.365-13.566 7.921-13.425 23.639M82.272 21.719c4.338-5.251 7.258-12.563 6.462-19.836-6.254.251-13.816 4.167-18.301 9.416-4.02 4.647-7.54 12.087-6.591 19.216 6.971.54 14.091-3.542 18.43-8.796"
+ />
+ </svg>
+ <span class="os-name">Mac OS</span>
+ <a class="file-name" href="./mling-mac.tar.gz"
+ >DOWNLOAD<span class="btn-arrow">↓</span></a
+ >
+ <span class="checksum"
+ ><a href="./mling-mac.tar.gz.sha256"
+ >SHA256</a
+ ></span
+ >
+ </div>
+ </div>
+
+ <p class="checksum-note">
+ Packages are built on every push to
+ <a
+ href="https://github.com/mingling-rs/mingling"
+ target="_blank"
+ >main</a
+ >
+ and published here automatically.
+ </p>
+ </div>
+ </section>
+
+ <section class="section alt">
+ <div class="container">
+ <h3>Install</h3>
+ <p>
+ Extract the package and load the bundled environment script
+ — it adds <code>bin/</code> to <code>PATH</code> and enables
+ shell completion.
+ </p>
+ <div class="code-block">
+ <pre><code class="language-bash"><span class="cm"># Linux / macOS (zsh, bash, fish)</span>
+tar -xzf mling-linux.tar.gz
+source load_mling.sh
+
+<span class="cm"># Windows (PowerShell)</span>
+tar -xzf mling-win.tar.gz
+.\load_mling.ps1</code></pre>
+ </div>
+ <h3>Update</h3>
+ <p>
+ <code>mling</code> can update itself. It downloads from this
+ page by default, verifies the sha256 checksum, and applies
+ the new version on your next invocation.
+ </p>
+ <div class="code-block">
+ <pre><code class="language-bash"><span class="cm"># Update to the latest build</span>
+mling update
+
+<span class="cm"># Point it at a custom mirror if needed</span>
+mling cfg update-url https://mingling-rs.github.io/mingling/dist
+mling update</code></pre>
+ </div>
+ </div>
+ </section>
+
+ <footer>
+ <a href="../">Mìng Lìng</a> ·
+ <a href="https://github.com/mingling-rs/mingling" target="_blank"
+ >GitHub</a
+ >
+ ·
+ <a href="../docs/doc.html">Docs</a>
+ </footer>
+
+ <script src="../docs/scripts/display-parse.js"></script>
+ <script src="../docs/scripts/highlight/highlight.min.js"></script>
+ <script src="../docs/scripts/highlight/bash.min.js"></script>
+ <script>
+ hljs.highlightAll();
+ </script>
+
+ <script>
+ // Load and render help.txt with the same coloring logic as display.rs
+ (function () {
+ var el = document.getElementById("shell-help");
+ if (!el) return;
+ fetch("../mingling_cli/help/help.txt")
+ .then(function (r) {
+ if (!r.ok) throw new Error("HTTP " + r.status);
+ return r.text();
+ })
+ .then(function (text) {
+ el.innerHTML = window.MlingDisplay.parse(text);
+ })
+ .catch(function (err) {
+ el.textContent =
+ "Failed to load help.txt: " + err.message;
+ });
+ })();
+ </script>
+
+ <script>
+ // Highlight the hovered line in code blocks
+ (function () {
+ function attachLineHighlight(container) {
+ var pre =
+ container.tagName === "PRE"
+ ? container
+ : container.querySelector("pre");
+ var code = pre.querySelector("code");
+ var hl = document.createElement("div");
+ hl.className = "code-line-highlight";
+ pre.appendChild(hl);
+
+ var lineHeight = parseFloat(
+ getComputedStyle(code).lineHeight,
+ );
+ var padTop =
+ parseFloat(getComputedStyle(code).paddingTop) || 0;
+
+ pre.addEventListener("mousemove", function (e) {
+ var rect = pre.getBoundingClientRect();
+ var y = e.clientY - rect.top;
+ var index = Math.floor((y - padTop) / lineHeight);
+ var lineCount = code.innerText.split("\n").length;
+ if (index < 0) index = 0;
+ if (index >= lineCount) index = lineCount - 1;
+ hl.style.top = padTop + index * lineHeight + "px";
+ hl.style.height = lineHeight + "px";
+ hl.style.opacity = "1";
+ });
+
+ pre.addEventListener("mouseleave", function () {
+ hl.style.opacity = "0";
+ });
+ }
+
+ document
+ .querySelectorAll(".code-block, .shell-term")
+ .forEach(attachLineHighlight);
+ })();
+ </script>
+
+ <script>
+ // Hero command carousel typewriter
+ (function () {
+ var code = document.querySelector(".term-hero");
+ if (!code) return;
+
+ var commands = [
+ "mling metadata",
+ "mling lint",
+ "mling ra-lint",
+ "mling proj-init 0.5.0@basic",
+ "mling class-add subcommand calc",
+ "mling install",
+ "mling pkg-enable your-cli@0.1.0",
+ "mling pkg-show",
+ "mling cfg update-url <URL>",
+ "mling update",
+ "mling -h",
+ ];
+ var idx = 0;
+ var cursor = document.createElement("span");
+ cursor.className = "term-cursor";
+ code.appendChild(cursor);
+
+ function clear() {
+ while (code.firstChild && code.firstChild !== cursor) {
+ code.removeChild(code.firstChild);
+ }
+ }
+
+ function typeText(text, cls, speed, done) {
+ var i = 0;
+ (function step() {
+ if (cls) {
+ var span = document.createElement("span");
+ span.className = cls;
+ span.textContent = text[i];
+ code.insertBefore(span, cursor);
+ } else {
+ cursor.insertAdjacentText("beforebegin", text[i]);
+ }
+ i++;
+ if (i < text.length) {
+ setTimeout(step, speed);
+ } else {
+ done();
+ }
+ })();
+ }
+
+ function play() {
+ var cmd = commands[idx];
+ idx = (idx + 1) % commands.length;
+ clear();
+ typeText("~# ", "term-prompt", 60, function () {
+ typeText(cmd, "term-cmd", 55, function () {
+ setTimeout(play, 2500);
+ });
+ });
+ }
+
+ setTimeout(play, 800);
+ })();
+ </script>
+
+ <script>
+ // Insert diamond decorations at line intersections
+ (function () {
+ document
+ .querySelectorAll("body > section + section, body > footer")
+ .forEach(function (el) {
+ var left = document.createElement("span");
+ left.className = "line-diamond left";
+ var right = document.createElement("span");
+ right.className = "line-diamond right";
+ el.appendChild(left);
+ el.appendChild(right);
+ });
+ })();
+ </script>
+
+ <script>
+ // Persistent glow dot following the mouse
+ var cursorDot = document.createElement("div");
+ cursorDot.className = "cursor-dot";
+ document.body.appendChild(cursorDot);
+
+ document.addEventListener("mousemove", function (e) {
+ cursorDot.style.left = e.clientX + "px";
+ cursorDot.style.top = e.clientY + "px";
+ if (cursorDot.style.opacity !== "1") {
+ cursorDot.style.opacity = "1";
+ }
+ });
+
+ // Ink drop ripple on click
+ document.addEventListener("click", function (e) {
+ var drop = document.createElement("div");
+ drop.className = "ink-drop";
+ drop.style.left = e.clientX + "px";
+ drop.style.top = e.clientY + "px";
+ document.body.appendChild(drop);
+ setTimeout(function () {
+ drop.remove();
+ }, 1000);
+ });
+ </script>
+
+ <script>
+ // Disable full-page snap after the last section so the footer is reachable
+ (function () {
+ var html = document.documentElement;
+ var sections = document.querySelectorAll(
+ "body > section.hero, body > section.section",
+ );
+ if (!sections.length) return;
+ var last = sections[sections.length - 1];
+ var lastTop = last.offsetTop;
+ var disabled = false;
+
+ window.addEventListener(
+ "wheel",
+ function (e) {
+ if (
+ e.deltaY > 0 &&
+ window.scrollY >= lastTop - 5 &&
+ !disabled
+ ) {
+ html.style.scrollSnapType = "none";
+ disabled = true;
+ }
+ },
+ { passive: true },
+ );
+
+ window.addEventListener(
+ "scroll",
+ function () {
+ if (disabled && window.scrollY < lastTop) {
+ html.style.scrollSnapType = "";
+ disabled = false;
+ }
+ },
+ { passive: true },
+ );
+ })();
+ </script>
+ </body>
+</html>