TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻译准备中
A minimal macOS web browser with a daily journal, linked notes and point-and-shoot capture. Source available (PolyForm Strict).
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A minimal macOS web browser built on Chromium, inspired by Beam.
It has a daily journal, linked notes, a unified omnibox, and point-and-shoot capture from web pages.
Everything you write is a plain Markdown file on disk.
• Engine: Chromium via the Chromium Embedded Framework (CEF 154), one browser per tab.
• App: native AppKit, written in Swift. A thin Objective-C++ bridge wraps CEF's C++ API.
Requirements: macOS 12+ on Apple silicon, Xcode (Swift 6 toolchain), CMake and Ninja (brew install cmake ninja).查看完整 README ↗A minimal macOS web browser built on Chromium, inspired by Beam. It has a daily journal, linked notes, a unified omnibox, and point-and-shoot capture from web pages. Everything you write is a plain Markdown file on disk.
Requirements: macOS 12+ on Apple silicon, Xcode (Swift 6 toolchain), CMake and Ninja (brew install cmake ninja).
./scripts/setup_cef.sh
./scripts/setup_sparkle.sh
cmake -G Ninja -B build && ninja -C build
open build/Glea.app
setup_cef.sh downloads the CEF binary distribution (~130 MB) into third_party/cef and verifies its checksum. setup_sparkle.sh does the same for Sparkle, the updater, into third_party/sparkle.
That stock build can't play H.264 or AAC. Release builds use CEF built from source by scripts/cef/build-cef.sh, where macOS decodes them: H.264 with VideoToolbox, AAC with AudioToolbox. FFmpeg's own H.264 and AAC decoders are compiled out. The first build takes about 8 hours and ~100 GB; the patches it applies are in scripts/cef/.
activity.json in Application Support) keeps 30 days.[[Note name]] links are clickable, autocomplete after [[, and each note lists its linked references (backlinks).[[link]] to it.[[link]], Link All does them all.**bold** turns bold the moment it's closed, and # becomes a heading. A construct's syntax shows only while the cursor is inside it.```swift), inline images, videos, sounds and PDFs (dropped, pasted or picked from the slash menu, written as or a link on its own line), and .Notes use Obsidian's flavor of Markdown, so the same files work in both apps:
[[Note#Heading]], [[Note#^block-id]], [[#Heading in this note]]. Clicking one scrolls there. After [[Note# the link menu lists the note's headings, and after #^ its blocks (choosing one without an id gives it one). Links written as paths ([[Folder/Note]], [[Note.md]]) resolve by name.![[image.png]] (|300 sets its width), ![[clip.mp4]] and ![[paper.pdf]] show the file, found by name anywhere in the notes folder. ![[Note]] and ![[Note#Heading]] show the note or section in place, rendered like the note itself (tables, math, media, embeds) and following its edits. Its name above it opens it.aliases work as link names, and its tags count as tags.#tag and #nested/tag are links. Typing # and a letter offers the tags already used. Clicking a tag lists the notes that have it, and searching #tag in All Notes does the same.==highlights==, %%comments%% (faded) and callouts (> [!warning] Title) in their type's color. embeds like a bare link does.The folder layout stays Glea's: notes/, journal/ and assets/.
Everything lives in ~/Documents/Glea (change it with Glea ▸ Change Notes Folder…):
notes/<Title>.md
journal/<yyyy-MM-dd>.md
assets/ images downloaded by captures
Modelled on Beam and Kosmik.
assets/.Glea Clipper collects from Chrome, Edge, Arc, Brave, Firefox and Safari. Get it for Firefox on Firefox Add-ons. Its Safari version comes inside Glea: turn it on in Safari ▸ Settings ▸ Extensions. It brings point and shoot (hold ⌥, click or drag), plus the selection, a page's main content as an article, an image or a link. It goes into today's journal, a new note, or Glea's capture picker.
glea://capture?kind=…&url=…&markdown=…&to=journal URL, like Obsidian's Web Clipper. Very long captures go through the clipboard instead (clipboard=1).content-script.js. The extension takes the app's part: it watches the ⌥ key and takes the screenshots for dragged areas.assets/ too. A clipped article becomes the body under a link to its source.glea:// URL (the browser asks first), so these captures only ever append, and only from http and https sources.Notes and the journal have a scroll-aware table of contents in the left margin, after hello-mat.com's component.
Timings follow Beam's: short ease-in-outs for state changes and firm springs for movement.
scripts/release.sh publishes each release on GitHub releases: the DMG, the zip Sparkle installs and the signed appcast, which glea.app/appcast.xml serves. The notes are the "Glea x.y.z" commit's. The appcast is signed with the EdDSA key in the release Mac's keychain (account glea); back it up with third_party/sparkle/bin/generate_keys --account glea -x <file>, since losing it strands every installed copy.~/Downloads.| Shortcut | Action |
|---|---|
| ⌘T / ⌘L | New tab (start page) / edit the current tab's address |
| ⌘D | Toggle web ↔ journal & notes |
| ⇧⌘J / ⇧⌘H | Journal / All notes |
| ⇧⌘N | New incognito window |
| ⌘N / ⌥⌘N | New window / new note |
| ⌘K | Omnibox (from anywhere) |
| ⌥⌘⌫ | Move note to Trash |
| ⌥ hold + click | Point and shoot |
| ⌥⌘ hold + click | Point and shoot, posts and videos as text |
| ⌘S | Collect page |
| ⌘W / ⇧⌘T | Close tab (or the window, once it has none) / reopen closed tab |
| ⌥⌘W | Close all tabs (pinned ones stay) and go back to the notes; ⇧⌘T reopens them all |
| ⌘1–9, ⇧⌘[ ⇧⌘], ⌥⌘← ⌥⌘→ | Switch tabs (Journal / All Notes in notes mode) |
| ⌘[ ⌘] ⌘R | Back, forward, reload |
| ⌘F, ⌘G | Find in page |
| ⌥⌘I | Developer tools (show / hide) |
src/bridge/ Objective-C++ — everything that touches CEF
include/GleaBridge.h the ObjC API Swift sees (module "GleaBridge")
glea_main.mm CEF init / message loop / shutdown, NSApplication subclass
glea_browser_view.mm GleaBrowserView (NSView per tab) + its CefClient
helper_main.mm helper processes; exposes __gleaNative.post() to pages
src/app/ Swift — the app
BrowserWindowController window, modes, tabs, overlays, menu actions
TopBar, Omnibox tab strip, find bar, omnibox, capture picker
TableOfContents scroll-aware table of contents
Motion animation curves and helpers
NoteViews journal, note page (with backlinks), notes list
MarkdownEditor live-preview editor (TextKit 1, custom layout manager)
SyntaxHighlighter code block colors, one regex grammar per language
NoteStore Markdown files, search, backlinks, rename, captures
Updater, UpdateWindow Sparkle updates, the top bar's pill, the update window
src/clipper/ Glea Clipper for Safari, an app extension in Glea.app/Contents/PlugIns
(its files synced from glea-extensions by scripts/sync_clipper.sh)
ExternalCapture glea://capture URLs from the browser extensions
BrowsingData history, session, search engines, image cache
src/resources/content-script.js point-and-shoot + HTML→Markdown, runs in pages
__gleaNative.post(name, json) sends a CEF process message to the browser process.GLEA_DATA_DIR, GLEA_SUPPORT_DIR and GLEA_PROFILE_DIR redirect notes, app state and the Chromium profile.GLEA_TEST_HOOKS=1 lets scripts drive the UI through distributed notifications (see TestHooks.swift).--use-mock-keychain to avoid a Keychain prompt after every rebuild. Cookies are therefore encrypted with a fixed key. Set GLEA_REAL_KEYCHAIN=1 once the app is properly signed.Glea's design is inspired by Beam: its journal and notes, point and shoot, omnibox, tab groups and motion. No code or assets are taken from it.
Math is typeset by SwiftMath (MIT License, © 2023 Computer Inspirations), vendored in third_party/SwiftMath, with the Latin Modern Math font (GUST Font License).
Mermaid diagrams are drawn by Pele (MIT License, © 2026 kepano), vendored in third_party/pele (its dist/pele.global.js, 1.6.0).
Glea is source available under the PolyForm Strict License 1.0.0: you may read, build and use it for noncommercial purposes, but not change or redistribute it. Third-party code in third_party/ keeps its own license. For commercial use, contact the author.
 or ![[file|300]] (dragging back to full width removes it).$…$ in a line of text, $$…$$ as a block (on one line or around several). Formulas show typeset and turn back into their source when the cursor goes in. Dollars with a space just inside them, like "$5 and $10", stay text.:---:, ---:).| a | b | and pressing Enter turns it into a table.[] (or [ ] , [x] ) at the start of a line makes a task.