Move to website folder
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
data.db
|
||||
_plug
|
||||
_trash
|
||||
@@ -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
|
||||
@@ -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
|
||||
```
|
||||
@@ -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 it’s 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. **You’re looking at it at this very moment!** Feel free to make some edits, to get a feel for it. Don’t worry, you won’t 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? Here’s two to get you started:
|
||||
|
||||
* [A Tour of Silver Bullet’s features](https://youtu.be/RYdc3UF9gok) — spoiler alert: it’s cool.
|
||||
* [A look the SilverBullet architecture](https://youtu.be/mXCGau05p5o) — spoiler alert: it’s plugs all the way down.
|
||||
|
||||
## Installing and running Silver Bullet
|
||||
Like what you’re seeing? Install it yourself locally or on your server! It’s 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 it’s 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.
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
{{#each .}}
|
||||
* [{{#if done}}x{{else}} {{/if}}] [[{{page}}@{{pos}}]] {{name}}
|
||||
{{/each}}
|
||||
@@ -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 Obsidian’s 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.
|
||||
@@ -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
|
||||
@@ -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
|
||||
```
|
||||
@@ -0,0 +1 @@
|
||||
This is very much in progress, have a look at our [Github Issues](https://github.com/silverbulletmd/silverbullet/issues) page if you’d like to help out!
|
||||
@@ -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 note’s 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)
|
||||
Reference in New Issue
Block a user