diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..2de2607 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,21 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + +jobs: + frontend: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + + - run: npm ci + # `npm run lint` is skipped until an ESLint config lands in the repo. + - run: npm run build diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..04f3e6f --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,64 @@ +# Builds installers for macOS (Apple Silicon + Intel), Windows and Linux, +# and attaches them to a draft GitHub Release. +# +# Usage: tag a commit and push the tag โ€” +# git tag v0.2.0 && git push origin v0.2.0 +# then review the draft release on GitHub and publish it. +name: Release + +on: + push: + tags: + - 'v*' + +jobs: + build: + permissions: + contents: write + strategy: + fail-fast: false + matrix: + include: + - platform: macos-latest + args: '--target aarch64-apple-darwin' + - platform: macos-latest + args: '--target x86_64-apple-darwin' + - platform: ubuntu-22.04 + args: '' + - platform: windows-latest + args: '' + runs-on: ${{ matrix.platform }} + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + + - uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }} + + - name: Install Linux dependencies + if: matrix.platform == 'ubuntu-22.04' + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf + + - uses: swatinem/rust-cache@v2 + with: + workspaces: src-tauri + + - run: npm ci + + - uses: tauri-apps/tauri-action@v0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tagName: ${{ github.ref_name }} + releaseName: 'Mycel ${{ github.ref_name }}' + releaseBody: 'Download the installer for your OS below: `.dmg` (macOS), `.msi` (Windows), `.deb` / `.AppImage` (Linux).' + releaseDraft: true + prerelease: false + args: ${{ matrix.args }} diff --git a/README.md b/README.md index a84f086..b2f3d4f 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,11 @@

- Plain .md files on disk. A real Rust + Tauri shell. Wikilinks, a force-directed graph, inline databases, GitHub-backed sync, and a global hotkey that turns a fleeting thought into a note in under a second. + Plain .md files on disk. A real Rust + Tauri shell. Wikilinks, a force-directed graph, inline databases, LaTeX math, a present mode that turns any note into slides, GitHub-backed sync, and a global hotkey that turns a fleeting thought into a note in under a second.

- Quick start + Download   Stars   @@ -58,6 +58,10 @@ Most "second brains" lock your notes in a proprietary format, a slow Electron co ## ๐Ÿš€ Quick start +**Grab a binary** from the [latest release](https://github.com/Mycel-AI-notes/Mycel/releases/latest) โ€” `.dmg` for macOS, `.msi` for Windows, `.deb` / `.AppImage` for Linux โ€” and you're writing in under a minute. + +Or build from source: + ```bash git clone https://github.com/Mycel-AI-notes/Mycel.git cd Mycel @@ -86,6 +90,7 @@ npm run tauri build - ๐Ÿ”— **Wikilinks** โ€” `[[Like this]]` autocomplete, click-to-navigate, missing targets are created for you. - โšก **Slash menu** โ€” type `/` for quick inserts (tables, code, headings, calloutsโ€ฆ). - ๐Ÿ“Š **Editable GFM tables** rendered as styled blocks; inline Markdown (links, wikilinks, bold) renders *inside* cells and stays clickable. +- ๐Ÿงฎ **LaTeX math** โ€” inline `$โ€ฆ$` and block `$$โ€ฆ$$`, rendered live with [KaTeX](https://katex.org) in the editor and on slides. - ๐Ÿ—‚๏ธ **Tabs done right** โ€” single click opens a *preview* tab (italic). Switching files replaces it, so you don't drown in junk tabs. Save (`โŒ˜/Ctrl+S`) or double-click to pin. - ๐Ÿ” **Quick switcher** (`โŒ˜/Ctrl+O`) โ€” fuzzy search across note titles and paths. - โšก **Quick notes** (`โŒ˜/Ctrl+Shift+N`, **global** โ€” works even when the app is minimised) โ€” drops a timestamped note in `quick/YYYY-MM-DD/` so a thought never gets away. @@ -96,6 +101,7 @@ npm run tauri build - ๐Ÿ“ **Live outline panel** โ€” every heading in the current note, click to jump. - โ†ฉ๏ธ **Backlinks panel** โ€” folder-aware incoming references, plus outgoing wikilinks and external URLs. - ๐Ÿท๏ธ **Tag system** โ€” `#tags` autocomplete in the editor, dedicated tag panel, tag search across the vault, tag nodes in the graph. +- ๐ŸŽž๏ธ **Present mode** (`โŒ˜/Ctrl+Shift+P`) โ€” any note becomes a slide deck. `---` lines split slides (fence-aware, frontmatter is skipped), `O` opens the overview grid, `F` toggles fullscreen, `E` drops you back in the editor at the current slide's source. Math, code blocks and links all render on slides. ### Structured data @@ -128,6 +134,7 @@ npm run tauri build | `โŒ˜/Ctrl + O` | Quick switcher (fuzzy file finder) | | `โŒ˜/Ctrl + Shift + N` | **Quick note** (works globally, even when Mycel is unfocused) | | `โŒ˜/Ctrl + G` | Toggle graph view | +| `โŒ˜/Ctrl + Shift + P` | Present mode (current note as slides) | | `โŒ˜/Ctrl + S` | Save current note (also pins a preview tab) | | `/` in the editor | Slash command menu | | `[[` in the editor | Wikilink autocomplete | @@ -145,6 +152,7 @@ npm run tauri build | Frontend | React 19 + TypeScript + Vite | | Editor | CodeMirror 6 | | Graph | `d3-force` | +| Math | [KaTeX](https://katex.org) | | State | Zustand (with `persist` for UI prefs, recent vaults, sync config) | | Styling | Tailwind CSS | | Icons | `lucide-react` | @@ -269,8 +277,6 @@ The big things on the bench, roughly in priority order: - ๐Ÿ”Ž **Semantic search** โ€” embed your notes locally and search by meaning, not just keywords. "What did I write about Bayesian priors in March?" โ€” works even if the note never used those exact words. - ๐Ÿค– **Local AI integrations** โ€” pluggable local LLM backends (Ollama, llama.cpp, LM Studio). A proactive assistant that surfaces related notes, suggests links, drafts daily summaries, and answers questions grounded in your vault. Everything runs on your machine by default; bring-your-own cloud key is opt-in. -- ๐Ÿ” **Encrypted notes** *(security-grade)* โ€” per-note encryption to `.md.age` files using [age](https://github.com/FiloSottile/age) with X25519 keys, mastered by a hardware-backed identity (Secure Enclave on macOS, TPM on Windows/Linux, FIDO2/YubiKey as a portable option). The plaintext private key **never** touches disk; decryption happens in-process and is wiped on lock. Optional post-quantum (Kyber) wrapping for long-lived secrets. Encrypted notes still sync as opaque blobs through GitHub. -- ๐Ÿงฎ **LaTeX support** โ€” inline `$โ€ฆ$` and block `$$โ€ฆ$$` math, rendered with KaTeX. Copy-as-image for sharing, optional MathML output for accessibility. - ๐ŸŒณ **Knowledge-base hierarchy** โ€” first-class nested structure: collapsible KB sections, breadcrumb navigation, parent/child relations surfaced in the graph and backlinks, drag-to-reparent in the sidebar. - ๐Ÿ–ผ๏ธ **Image support** โ€” drag-and-drop / paste images, stored next to the note (or in a configurable `attachments/` folder) and rendered inline. - ๐ŸŽจ **Community themes** โ€” a theme picker open to contributions.