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.
-
+
@@ -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.