1
0

Move to website folder

This commit is contained in:
Zef Hemel
2022-07-15 14:59:47 +02:00
parent 7a86c4ef56
commit 307bd3be7a
17 changed files with 73 additions and 69 deletions
+3
View File
@@ -0,0 +1,3 @@
data.db
_plug
_trash
+34
View File
@@ -0,0 +1,34 @@
This is currently implemented in [this github repo](https://github.com/silverbulletmd/silverbullet-mount):
Space mounting in `MOUNTS`
```yaml
- path: file:/Users/zef/git/blog
prefix: blog/
perm: ro,rw #default rw
- path: http://someIP:3000
prefix: prod/
```
Features
* Auto translates internal wiki links (prefixes with prefix) and removes prefix upon save
To do:
* [ ] Handle queries
* `page` and `link` query needs to dynamically add/remove a `and name =~ /^🚪 PREFIX/` clause)
* `task` same but with `page` check
* [x] Add `file:` support
* [x] Add `http:`/`https:` support
* Due to namespacing, the mounted space needs to be namespaced somehow
* Could be an emoji, could be a page prefix (now using `name`)
* On the fly link rewriting on read and write with prefix
* Will require an actual set of `fs` syscalls:
* readFile(path)
* writeFile(path, text)
* listFiles(path) with stat-like results (at least enough for `PageMeta` responses)
* If this exists, should not all disk file access work through plugs as well and have that abstraction happen at this level?
protocols:
* file:
* http/https with “password” field for authentication
+14
View File
@@ -0,0 +1,14 @@
This file lists all plugs that SilverBullet will load. Run the `Plugs: Update` command to update and reload this list of plugs.
```yaml
- builtin:core
- builtin:emoji
- builtin:ghost
- builtin:git
- builtin:github
- builtin:markdown
- builtin:mattermost
- builtin:plugmd
- builtin:query
- builtin:tasks
```
+31
View File
@@ -0,0 +1,31 @@
# Silver Bullet
## Markdown as a platform
Silver Bullet (SB) is a highly extensible, open source **personal knowledge playground**. At its core its a Markdown-based writing/note taking application that stores _pages_ (notes) as plain markdown files in a folder referred to as a _space_. Pages can be cross-linked using the `[[link to other page]]` syntax. This makes it a simple tool for [Personal Knowledge Management](https://en.wikipedia.org/wiki/Personal_knowledge_management). However, once you leverage its various extensions (called _plugs_) it can feel more like a _knowledge playground_, allowing you to annotate, combine and query your accumulated knowledge in creative ways, specific to you.
What does Silver Bullet look like? Well, have a look around. **Youre looking at it at this very moment!** Feel free to make some edits, to get a feel for it. Dont worry, you wont break anything, nothing is saved (just reload the page to see).
## Explore more
Click on the links below to explore various of Silver Bullet more in-depth:
[[🤯 Features]]
[[💡 Inspiration]]
[[🔌 Plugs]]
[[🔨 Development]]
[[🗺 Roadmap]]
More of a video person? Heres two to get you started:
* [A Tour of Silver Bullets features](https://youtu.be/RYdc3UF9gok) — spoiler alert: its cool.
* [A look the SilverBullet architecture](https://youtu.be/mXCGau05p5o) — spoiler alert: its plugs all the way down.
## Installing and running Silver Bullet
Like what youre seeing? Install it yourself locally or on your server! Its free.
To run a release version, you need to have a recent version of [node.js installed](https://nodejs.org/en/) (16+) as well as some basic build infrastructure (make, cpp). Silver Bullet has only been tested on MacOS and Linux thus far.
To install and run, create a folder for your pages (can be empty or an existing folder with `.md` files) and run:
npx @silverbullet/server <path-to-folder>
Optionally you can use the `--port` argument to specify a HTTP port (defaults to `3000`) and you can pass a `--password` flag to require a password to access. Note this is a rather weak security mechanism, so its recommended to add additional layers of security on top of this if you run this on a public server somewhere (at least add TLS). Personally I run it on a tiny Linux VM on my server at home, and use a VPN (Tailscale) to access it from outside my home.
+3
View File
@@ -0,0 +1,3 @@
{{#each .}}
* [{{#if done}}x{{else}} {{/if}}] [[{{page}}@{{pos}}]] {{name}}
{{/each}}
+3
View File
@@ -0,0 +1,3 @@
Inspiration for Silver Bullet comes primarily from [Obsidian](https://obsidian.md/) and its various plugs (the work-in-progress plugs around querying and tasks are inspired by Obsidians tasks and dataview plugins), but also [Roam Research](https://roamresearch.com/) was an inspiration.
Why start something new? Neither of these tools are open source, and they make some different choices, specifically on how extensibility is implemented — more on the differences some time in the future.
+21
View File
@@ -0,0 +1,21 @@
Silver Bullet at its core is bare bones in terms of functionality, most of its power it gains from **plugs**.
Plugs are an extension mechanism (implemented using a library called `plugos` that runs plug code on the server in a sandboxed v8 node.js process, and in the browser using web workers). Plugs can hook into SB in various ways: plugs can extend the Markdown parser and its syntax, define new commands and keybindings, respond to various events triggered either on the server or client side, as well as run recurring and background tasks. Plugs can even define their own extension mechanisms through custom events. Each plug runs in its own sandboxed environment and communicates with SB via _syscalls_ that expose a vast range of functionality. Plugs can be loaded, unloaded and updated without having to restart SB itself.
Examples of functionality implemented as plugs:
* _Core functionality_ such as:
* Navigation between pages by clicking or hitting `Cmd/Ctrl-Enter`
* Page auto complete when using the `[[page link]]` syntax
* Indexing of cross-page links and automatically updating all references to them when a page is renamed
* Text editing commands such as bold (`Cmd/Ctrl-b`) and italics (`Cmd/Ctrl-i`) or quote or itemize entire sections.
* Full text indexing and search
* Slash commands such as `/today`, `/tomorrow` and `/meta` (to insert page meta data)
* Emoji auto complete using the `:emoji:` syntax
* An embedded query language that can be used to query various sets of indexed entities, such as:
* Tasks using the Markdown task syntax
* Page backlinks
* Page in your space and its meta data
* Data objects embedded in your pages
* Git integration
* Github integration
+38
View File
@@ -0,0 +1,38 @@
## Stack
Silver Bullet is written in [TypeScript](https://www.typescriptlang.org/) and built on top of the excellent [CodeMirror 6](https://codemirror.net/) editor component. Additional UI is built using React.js. [ParcelJS](https://parceljs.org/) is used to build both the front-end and back-end bundles. The server backend runs as a HTTP server on node.js using express.
## Development
This [Silver Bullet repo](https://github.com/zefhemel/silverbullet) is a monorepo using npm's "workspaces" feature.
Requirements: node 16+ and npm 8+ as well as C/C++ compilers (for compiling SQLite, on debian/ubuntu style systems you get these via the `build-essential` package)
To run, after clone:
```shell
# Install dependencies
npm install
# Run initial build (web app, server, etc.)
npm run build
# Again, to install the CLIs just built (plugos-bundler, silverbullet)
npm install
# Build built-in plugs
npm run build-plugs
# Launch server
npm run server -- <PATH-TO-YOUR-SPACE>
```
This `<PATH-TO-YOUR-SPACE>` can be any folder with markdown files, upon first boot SB will ensure there is an `index.md` file (root page) and `PLUGS.md` file (with default list of plugs to load). SB will also create a SQLite `data.db` file with various data caches and indices (you can delete this file at any time and use the `Space: Reindex` command to reindex everything).
Open SB at http://localhost:3000 If you're using a browser supporting PWAs, you can install this page as a PWA. This also works on iOS (use the "Add to homescreen" option in the share menu).
General development workflow:
Run these in separate terminals
```shell
# Runs ParcelJS in watch mode, rebuilding the server and webapp continuously on change
npm run watch
# Runs the silverbullet server
npm run server
# Builds (and watches for changes) all builtin plugs (in packages/plugs)
npm run plugs
```
+1
View File
@@ -0,0 +1 @@
This is very much in progress, have a look at our [Github Issues](https://github.com/silverbulletmd/silverbullet/issues) page if youd like to help out!
+10
View File
@@ -0,0 +1,10 @@
* **Free and open source** (MIT licensed)
* **Distraction free** UI with [What You See is What You Mean](https://en.wikipedia.org/wiki/WYSIWYM) Markdown editing.
* **Future proof**: stores all notes in a regular folder with markdown files, no proprietary file formats. While SB uses a SQLite database for indexes, this database can be wiped and rebuilt based on your pages at any time. Your Markdown files are the single source of truth.
* **Run anywhere**: run it on your local machine, or install it on a server. You access it via your web browser (desktop or mobile), or install it as a PWA (giving it its own window frame and dock/launcher/dock icon).
* **Keyboard oriented:** you can fully operate SB via the keyboard (on laptop/desktop machines as well as iPads with a keyboard):
* Switch between pages using `Cmd-k` (Mac) or `Ctrl-k` (Linux/Windows)
* Open the command palette using `Cmd-/` (Mac) or `Ctrl-/` (Linux/Windows)
* Use slash commands by entering a `/` in your notes text
* Various plugs add additional keyboard shortcuts and auto completions like when entering `[[page links]]` and typing emoji via the `:lemon:` syntax.
* **Extensible** through plugs (see below)