···1212- Remove bearer token authentication fallback from AppView [#26](https://issues.opake.app/issues/26.html)s
13131414### Added
1515+- Add SEO audit for web application [#263](https://issues.opake.app/issues/263.html)
1616+- Add web and AppView hosting [#262](https://issues.opake.app/issues/262.html)
1717+- Add web UI with AppView and SPA [#113](https://issues.opake.app/issues/113.html)
1518- Add mobile responsive layout for cabinet [#268](https://issues.opake.app/issues/268.html)
1619- Rewrite sharing page to reuse cabinet file browser components [#289](https://issues.opake.app/issues/289.html)
1720- Add web inbox for incoming grants [#150](https://issues.opake.app/issues/150.html)
···9494 { slug: "sharing-dids", title: "Sharing & DIDs", description: "Share files using decentralised identifiers without a central authority." },
9595 { slug: "keyrings", title: "Keyrings & Groups", description: "Manage secure group sharing for families, teams, and research groups." },
9696 { slug: "pairing", title: "Multi-Device Magic", description: "Securely transfer your identity keypair to new devices using your PDS as a relay." },
9797+ { slug: "cli", title: "The CLI Manual", description: "Complete command reference for the Opake CLI — identity, files, sharing, and more." },
9798 { slug: "glossary", title: "Glossary", description: "A quick-hit reference for the terminology and acronyms we use in Opake." },
9899 { slug: "faq", title: "FAQ", description: "Common questions about privacy, security, and how Opake compares to alternatives." },
99100];
···7788## Installation
991010-The CLI is built in Rust and distributed via `cargo`. Ensure you have Rust 1.75+ installed.
1010+The CLI is built in Rust and requires building from source. You'll need Rust 1.75+ and Git.
11111212-<CodeBlock language="sh">cargo install --path crates/opake-cli</CodeBlock>
1212+<CodeBlock language="sh">git clone https://tangled.org/sans-self.org/opake.app</CodeBlock>
13131414-This puts the `opake` binary in your `~/.cargo/bin/` directory.
1414+<CodeBlock language="sh">cd opake.app && cargo install --path crates/opake-cli</CodeBlock>
1515+1616+This puts the `opake` binary in your `~/.cargo/bin/` directory. Pre-built binaries and crates.io publishing are planned.
15171618---
1719···21232224### Login
23252424-<CodeBlock language="sh">
2525- # Standard OAuth login
2626- opake login you.bsky.social
2626+<CodeBlock language="sh">opake login you.bsky.social</CodeBlock>
27272828-# Explicit PDS override
2929-3030-opake login you.bsky.social --pds https://pds.example.com
3131-3232-# Legacy app-password fallback
2828+Override the PDS or fall back to legacy app-password auth:
33293434-opake login you.bsky.social --legacy
3030+<CodeBlock language="sh">opake login you.bsky.social --pds https://pds.example.com</CodeBlock>
35313636-</CodeBlock>
3232+<CodeBlock language="sh">opake login you.bsky.social --legacy</CodeBlock>
37333834### Managing Accounts
39354040-<CodeBlock language="sh">
4141- # List all authenticated accounts
4242- opake accounts
3636+<CodeBlock language="sh">opake accounts</CodeBlock>
43374444-# Set the default identity for future commands
4545-4646-opake set-default bob.other.com
3838+<CodeBlock language="sh">opake set-default bob.other.com</CodeBlock>
47394848-# Use a specific account for a single command
4040+Use a specific account for a single command with `--as`:
49415050-opake ls --as alice.example.com
5151-5252-</CodeBlock>
4242+<CodeBlock language="sh">opake ls --as alice.example.com</CodeBlock>
53435444---
5545···59496050### Upload & Download
61516262-<CodeBlock language="sh">
6363- # Encrypt and upload a file
6464- opake upload photo.jpg --tags vacation,beach
5252+<CodeBlock language="sh">opake upload photo.jpg --description "Beach vacation"</CodeBlock>
5353+5454+<CodeBlock language="sh">opake download photo.jpg -o ~/Downloads/copy.jpg</CodeBlock>
65556666-# Download and decrypt to a specific location
5656+Decrypt and stream to stdout without saving locally:
67576868-opake download photo.jpg -o ~/Downloads/copy.jpg
5858+<CodeBlock language="sh">opake cat notes.txt</CodeBlock>
69597070-# Decrypt and stream to stdout (no local save)
6060+### Organization
71617272-opake cat notes.txt
6262+<CodeBlock language="sh">opake ls --long</CodeBlock>
73637474-</CodeBlock>
6464+<CodeBlock language="sh">opake mkdir Photos</CodeBlock>
75657676-### Organization
6666+<CodeBlock language="sh">opake tree</CodeBlock>
77677878-<CodeBlock language="sh">
7979- # List files and directories
8080- opake ls --long
6868+### Metadata
81698282-# Create a virtual directory
7070+View or modify a document's metadata after upload:
83718484-opake mkdir Photos
7272+<CodeBlock language="sh">opake metadata photo.jpg</CodeBlock>
85738686-# Visualize your vault hierarchy
7474+<CodeBlock language="sh">opake metadata photo.jpg --rename "sunset.jpg"</CodeBlock>
87758888-opake tree
7676+<CodeBlock language="sh">opake metadata photo.jpg --add-tag vacation --add-tag beach</CodeBlock>
89777878+<CodeBlock language="sh">
7979+ opake metadata photo.jpg --description "Golden hour at Scheveningen"
9080</CodeBlock>
91819282---
···97879888### Direct Sharing (Grants)
9989100100-<CodeBlock language="sh">
101101- # Share a file with another DID or handle
102102- opake share secret.pdf bob.bsky.social
9090+<CodeBlock language="sh">opake share secret.pdf bob.bsky.social</CodeBlock>
10391104104-# List all grants you have issued
9292+<CodeBlock language="sh">opake shared</CodeBlock>
10593106106-opake shared
107107-108108-# Check your inbox for incoming shares
109109-110110-opake inbox
111111-112112-# Revoke a grant by its URI
113113-114114-opake revoke at://did:plc:123/app.opake.grant/tid456
9494+<CodeBlock language="sh">opake inbox</CodeBlock>
11595116116-</CodeBlock>
9696+<CodeBlock language="sh">opake revoke at://did:plc:123/app.opake.grant/tid456</CodeBlock>
1179711898### Group Sharing (Keyrings)
11999120120-<CodeBlock language="sh">
121121- # Create a new group keyring
122122- opake keyring create "The Collective"
100100+<CodeBlock language="sh">opake keyring create "The Collective"</CodeBlock>
123101124124-# Add a member to the group
102102+<CodeBlock language="sh">opake keyring add-member "The Collective" alice.bsky.social</CodeBlock>
125103126126-opake keyring add-member "The Collective" alice.bsky.social
127127-128128-# Upload a file to the group vault
129129-130130-opake upload internal-docs.zip --keyring "The Collective"
131131-132132-</CodeBlock>
104104+<CodeBlock language="sh">opake upload internal-docs.zip --keyring "The Collective"</CodeBlock>
133105134106---
135107···137109138110### Device Pairing
139111140140-<CodeBlock language="sh">
141141- # Request identity transfer (on the NEW device)
142142- opake pair request
112112+<CodeBlock language="sh">opake pair request</CodeBlock>
143113144144-# Approve identity transfer (on the EXISTING device)
114114+Run the above on the **new** device, then approve on the **existing** device:
145115146146-opake pair approve
147147-148148-</CodeBlock>
116116+<CodeBlock language="sh">opake pair approve</CodeBlock>
149117150118### The Nuclear Option
151119152152-<CodeBlock language="sh">
153153- # Logout of an account (removes local keys)
154154- opake logout alice.bsky.social
120120+<CodeBlock language="sh">opake logout alice.bsky.social</CodeBlock>
155121156156-# THE MINI NUKE: Delete every file in your vault, but keep your identity/keys
122122+<CodeBlock language="sh">opake rm -r /</CodeBlock>
157123158158-opake rm -r /
124124+<CodeBlock language="sh">opake purge --dry-run</CodeBlock>
159125160160-# THE FULL PURGE: Delete ALL Opake records from your PDS
161161-162162-opake purge --dry-run
163163-opake purge --force
164164-165165-</CodeBlock>
126126+<CodeBlock language="sh">opake purge --force</CodeBlock>
166127167128<Callout type="warning">
168168- **The Mini Nuke:** Running `opake rm -r /` is the fastest way to clear your entire vault while
169169- keeping your cryptographic identity intact. Use it when you want a fresh start without needing to
170170- re-pair your devices.
129129+ **The Mini Nuke:** Running `opake rm -r /` clears your entire vault while keeping your
130130+ cryptographic identity intact. Use it when you want a fresh start without re-pairing devices.
171131</Callout>
172132173133<Callout type="info">
174174- **Pro-Tip:** Most commands support the `--help` flag for detailed usage and sub-command options.
134134+ **Pro-Tip:** Every command supports `--help` for detailed usage and sub-command options.
175135</Callout>
176176-177177-Ready to learn about how these commands translate to the protocol? Check the [Technical Spec](/docs/protocol).
···5151 "Securely transfer your identity keypair to new devices using your PDS as a relay.",
5252 },
5353 {
5454+ slug: "cli",
5555+ title: "The CLI Manual",
5656+ icon: "terminal",
5757+ description:
5858+ "Complete command reference for the Opake CLI — identity, files, sharing, and more.",
5959+ },
6060+ {
5461 slug: "glossary",
5562 title: "Glossary",
5663 icon: "book",
+2
web/src/routes/_public/docs/$slug.tsx
···1010import SharingDids from "@/content/docs/sharing-dids.mdx";
1111import Keyrings from "@/content/docs/keyrings.mdx";
1212import Pairing from "@/content/docs/pairing.mdx";
1313+import Cli from "@/content/docs/cli.mdx";
1314import Glossary from "@/content/docs/glossary.mdx";
1415import Faq from "@/content/faq.mdx";
1516···2223 "sharing-dids": SharingDids,
2324 keyrings: Keyrings,
2425 pairing: Pairing,
2626+ cli: Cli,
2527 glossary: Glossary,
2628 faq: Faq,
2729};
+2
web/src/routes/cabinet/docs/$slug.tsx
···1111import SharingDids from "@/content/docs/sharing-dids.mdx";
1212import Keyrings from "@/content/docs/keyrings.mdx";
1313import Pairing from "@/content/docs/pairing.mdx";
1414+import Cli from "@/content/docs/cli.mdx";
1415import Glossary from "@/content/docs/glossary.mdx";
1516import Faq from "@/content/faq.mdx";
1617···2526 "sharing-dids": SharingDids,
2627 keyrings: Keyrings,
2728 pairing: Pairing,
2929+ cli: Cli,
2830 glossary: Glossary,
2931 faq: Faq,
3032};