freenet 0.2.100

Freenet core software
Documentation
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{title}</title>
    <link rel="icon" type="image/svg+xml" href="{favicon}">
    <style>{CSS}</style>
    <script>{JS}</script>
</head>
<body>
    <header>
        <div class="header-left">
            <img src="https://freenet.org/freenet_logo.svg" alt="Freenet" class="logo">
            <span class="header-title">FREENET</span>
            <span class="header-scope">Local Peer</span>
            <span class="badge" id="version-badge" data-version="{version}">v{version}</span>
            <a class="update-badge" id="update-badge" href="https://github.com/freenet/freenet-core/releases/latest" target="_blank" rel="noopener noreferrer" hidden>Update available</a>
            <span class="pub-key-label">Peer ID</span>
            <code class="pub-key" id="peer-id" title="Click to copy">{peer_id}</code>{peer_copy_btn}
            <span class="pub-key-label">Pub key</span>
            <code class="pub-key" id="pub-key" title="Click to copy">{pub_key}</code>{pub_copy_btn}
        </div>
        <div class="header-right">
            <span class="uptime">Up {uptime}</span>
            <button class="theme-btn" id="theme-btn" onclick="toggleTheme()" title="Toggle dark/light mode">
                <span id="theme-icon">☀️</span>
            </button>
        </div>
    </header>

    <div class="version-banner" id="version-mismatch-banner" data-asset-version="{asset_version}" role="alert" hidden></div>

    <main>
        {status_card}
        {peers_card}
        {transfer_card}
        {hosting_card}
        {governance_card}
        {ban_list_card}
        {contracts_card}
        {ops_card}

        <div class="card">
            <h2>Import your data</h2>
            <p class="note">
                Coming from a hosted "try Freenet" server? Import the
                <code>freenet-data.fnsx</code> bundle you exported there to bring
                your rooms, identities and other delegate data onto this peer.
                The import runs live, with no need to stop this node.
            </p>
            <button class="import-btn import-open-btn" type="button">Import data file&hellip;</button>
        </div>

        <div class="card">
            <h2>Freenet Links</h2>
            <ul class="app-list">
                <li>
                    <a href="/v1/contract/web/771DvtPMwt2PumPyrFvsz7fpvU1gogcmb5qtS1yYEEH9/">Atlas</a>
                    <p class="note">Decentralized search and recommendation engine for Freenet.</p>
                </li>
                <li>
                    <a href="/v1/contract/web/raAqMhMG7KUpXBU2SxgCQ3Vh4PYjttxdSWd9ftV7RLv/">River Chat</a>
                    <p class="note">You'll need an <a href="https://freenet.org/quickstart#invite-form" target="_blank" rel="noopener noreferrer">invite</a> to join the "Freenet Official" room.</p>
                </li>
                <li>
                    <a href="/v1/contract/web/122f6AR7PyF8d8mhczuNQM4xrLtBf5t8g2iB7PEVT7KC/">Freenet Mail</a>
                    <p class="note">Decentralized email built on Freenet. <a href="https://github.com/freenet/mail" target="_blank" rel="noopener noreferrer">Source</a>.</p>
                </li>
                <li>
                    <a href="/v1/contract/web/EqJ5YpEEV3XLqEvKWLQHFhGAac2qXzSUoE6k2zbdnXBr/">Delta</a>
                    <p class="note">A website builder for Freenet.</p>
                </li>
                <li>
                    <a href="/v1/contract/web/DLog47hEsrtuGT4N5XCeMBG45m4n1aWM89tBZXue2E1N/">Ghostkey Identity Vault</a>
                    <p class="note">Manage Ghostkey identities on Freenet.</p>
                </li>
                <li>
                    <a href="/v1/contract/web/E4m5WbaC4cdbpDjL82WfYUnrM9iMnfaaN8Tsn7UHPMjZ/">freenet.org</a>
                    <p class="note">The freenet.org website, mirrored on Freenet.</p>
                </li>
            </ul>
        </div>
    </main>

    <!-- Import-data modal. Lives OUTSIDE <main> on purpose: the dashboard
         auto-refresh (dashboard.js) swaps <main>'s innerHTML every 5s, which
         would wipe a chosen file, a typed key, or an in-progress import if the
         form were inside it. Kept here it survives every refresh. -->
    <div class="modal-overlay" id="import-modal" hidden>
        <div class="modal-card" role="dialog" aria-modal="true" aria-labelledby="import-modal-title">
            <h2 id="import-modal-title">Import your data</h2>
            <p class="note">
                Choose the encrypted <code>.fnsx</code> bundle and enter the
                access key that protects it. It is decrypted and imported
                entirely on this peer. The key never leaves your browser except
                to this local node.
            </p>
            <label class="modal-field">
                <span>Data file (.fnsx)</span>
                <input type="file" id="import-file" accept=".fnsx,application/octet-stream" />
            </label>
            <label class="modal-field">
                <span>Key type</span>
                <select id="import-key-kind">
                    <option value="token" selected>Access key (from the hosted proxy)</option>
                    <option value="passphrase">Passphrase (offline export)</option>
                </select>
            </label>
            <label class="modal-field">
                <span id="import-key-label">Access key</span>
                <input type="password" id="import-key" autocomplete="off" autocapitalize="off" spellcheck="false" placeholder="Paste your access key" />
            </label>
            <label class="modal-check">
                <input type="checkbox" id="import-overwrite" />
                <span>Overwrite secrets that already exist on this peer</span>
            </label>
            <div class="modal-status" id="import-status" role="status" aria-live="polite"></div>
            <div class="modal-actions">
                <button class="import-btn import-btn-secondary" type="button" id="import-cancel">Cancel</button>
                <button class="import-btn import-btn-primary" type="button" id="import-submit">Import</button>
            </div>
        </div>
    </div>
</body>
</html>