Rebranding from "Silver Bullet" to "SilverBullet" and updated a lot of website copy
This commit is contained in:
parent
c8f0304ade
commit
18c1da4431
4
.github/workflows/desktop.yml
vendored
4
.github/workflows/desktop.yml
vendored
@ -33,9 +33,9 @@ jobs:
|
||||
uses: denoland/setup-deno@d4873ceeec10de6275fecd1f94b6985369d40231
|
||||
with:
|
||||
deno-version: v1.29.1
|
||||
- name: Build Silver Bullet
|
||||
- name: Build SilverBullet
|
||||
run: deno task build
|
||||
- name: Create Silver Bullet bundle
|
||||
- name: Create SilverBullet bundle
|
||||
run: deno task bundle
|
||||
- name: Set MacOS signing certs
|
||||
if: matrix.os == 'macOS-latest'
|
||||
|
117
README.md
117
README.md
@ -1,6 +1,6 @@
|
||||
# Silver Bullet
|
||||
# SilverBullet
|
||||
|
||||
Silver Bullet (SB) is an extensible, open source **personal knowledge
|
||||
SilverBullet is an extensible, open source **personal knowledge
|
||||
platform**. At its core it’s a clean markdown-based writing/note taking
|
||||
application that stores your _pages_ (notes) as plain markdown files in a folder
|
||||
referred to as a _space_. Pages can be cross-linked using the
|
||||
@ -13,20 +13,20 @@ your accumulated knowledge in creative ways specific to you.
|
||||
<img src="https://github.com/silverbulletmd/silverbullet/raw/main/website/silverbullet-pwa.png" height="400"/><img src="https://github.com/silverbulletmd/silverbullet/raw/main/website/silverbullet-ios.png" height="400"/>
|
||||
|
||||
For more in-depth information, an interactive demo, and links to more
|
||||
background, check out the [Silver Bullet website](https://silverbullet.md)
|
||||
background, check out the [SilverBullet website](https://silverbullet.md)
|
||||
(published from this repo’s `website/` folder).
|
||||
|
||||
Or checkout these two videos:
|
||||
|
||||
- [A Tour of some of Silver Bullet’s features](https://youtu.be/VemS-cqAD5k) —
|
||||
- [A Tour of some of SilverBullet’s features](https://youtu.be/VemS-cqAD5k) —
|
||||
spoiler alert: it’s cool.
|
||||
- [A look the SilverBullet architecture](https://youtu.be/mXCGau05p5o) — spoiler
|
||||
alert: it’s plugs all the way down.
|
||||
|
||||
## Features
|
||||
|
||||
- **Free and open source**. Silver Bullet is MIT licensed.
|
||||
- **The truth is in the markdown.** Silver Bullet doesn’t use proprietary file
|
||||
- **Free and open source**. SilverBullet is MIT licensed.
|
||||
- **The truth is in the markdown.** SilverBullet doesn’t use proprietary file
|
||||
formats. It keeps its data as plain markdown files on disk. While SB uses a
|
||||
database for indexing and caching some indexes, all of that can be rebuilt
|
||||
from its markdown source at any time. If SB would ever go away, you can still
|
||||
@ -40,114 +40,19 @@ Or checkout these two videos:
|
||||
[plugs](https://silverbullet.md/🔌_Plugs), and you can customize it to your
|
||||
liking and your workflows.
|
||||
|
||||
## Installing Silver Bullet with Deno
|
||||
|
||||
### Installing Deno
|
||||
|
||||
Silver Bullet is built using [Deno](https://deno.land). To install Deno on Linux
|
||||
or Mac run:
|
||||
|
||||
```shell
|
||||
curl -fsSL https://deno.land/install.sh | sh
|
||||
```
|
||||
|
||||
This will install Deno into `~/.deno/bin`, add this folder to your `PATH` in
|
||||
your `~/.bashrc` or `~/.zshrc` file.
|
||||
|
||||
To install Deno on Windows (using Powershell) run:
|
||||
|
||||
```powershell
|
||||
irm https://deno.land/install.ps1 | iex
|
||||
```
|
||||
|
||||
### Install Silver Bullet
|
||||
|
||||
With Deno installed (see instruction above), run:
|
||||
|
||||
```shell
|
||||
deno install -f --name silverbullet -A --unstable https://get.silverbullet.md
|
||||
```
|
||||
|
||||
This will install `silverbullet` into your `~/.deno/bin` folder (which should
|
||||
already be in your path if you installed Deno following the previous
|
||||
instructions).
|
||||
|
||||
To run Silver Bullet create a folder for your pages (it can be empty, or be an
|
||||
existing folder with `.md` files) and run the following command in your
|
||||
terminal:
|
||||
|
||||
```shell
|
||||
silverbullet <pages-path>
|
||||
```
|
||||
By default, SB will bind to port `3000` on all interfaces. To specify a
|
||||
different address or port to listen on, use the `--hostname` and `--port`
|
||||
options. By default SB doesn’t add authentication, to add
|
||||
basic password authentication (BasicAuth), pass the `--user` flag (e.g.
|
||||
`--user pete:1234` for username `pete` and password `1234`).
|
||||
|
||||
Once downloaded and booted, SB will print out a URL to open SB in your browser
|
||||
(spoiler alert: by default this will be http://localhost:3000 ).
|
||||
|
||||
#protip: If you have a PWA enabled browser (like any browser based on Chromium)
|
||||
hit that little button right of the location bar to install SB, and give it its
|
||||
own window frame (sans location bar) and desktop/dock icon. At last the PWA has
|
||||
found its killer app.
|
||||
|
||||
## Upgrading Silver Bullet
|
||||
|
||||
Simply run this:
|
||||
|
||||
silverbullet upgrade
|
||||
|
||||
And restart Silver Bullet. You should be good to go.
|
||||
|
||||
## Installing Silver Bullet with Docker
|
||||
|
||||
There is a [docker image on docker hub](https://hub.docker.com/r/zefhemel/silverbullet). To use it, first create a volume to keep your space (markdown) files:
|
||||
|
||||
```shell
|
||||
docker volume create myspace
|
||||
```
|
||||
|
||||
Then, run the container, e.g. as follows:
|
||||
|
||||
```shell
|
||||
docker run -p 3000:3000 -v myspace:/space -d --name silverbullet zefhemel/silverbullet
|
||||
```
|
||||
|
||||
If you'd like to pass in additional command line arguments (e.g. `--user` to add authentication) you can just append those to the command, e.g.:
|
||||
|
||||
```shell
|
||||
docker run -p 3000:3000 -v myspace:/space -d --name silverbullet zefhemel/silverbullet --user me:letmein
|
||||
```
|
||||
|
||||
To build your own version of the docker image, run `./scripts/build_docker.sh`.
|
||||
|
||||
You can also use docker-compose if you prefer. From a silverbullet check-out run:
|
||||
|
||||
```shell
|
||||
PORT=3000 docker-compose up
|
||||
```
|
||||
|
||||
or similar.
|
||||
|
||||
To upgrade, simply pull the latest docker image (rebuilt and pushed after every commit to "main") and start the new container.
|
||||
|
||||
```shell
|
||||
docker pull zefhemel/silverbullet
|
||||
```
|
||||
|
||||
## Installing SilverBullet
|
||||
Check out the [official website](https://silverbullet.md)
|
||||
## Troubleshooting
|
||||
|
||||
If you upgraded to the new Deno-based Silver Bullet from an old version, you may
|
||||
If you upgraded to the new Deno-based SilverBullet from an old version, you may
|
||||
have to use the `silverbullet fix <pages-path>` command to flush out your old
|
||||
database and plugs. Plugs will likely need to be updated.
|
||||
|
||||
## Developing Silver Bullet
|
||||
## Developing SilverBullet
|
||||
|
||||
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/silverbulletmd/silverbullet)
|
||||
|
||||
Silver Bullet is written in [TypeScript](https://www.typescriptlang.org/) and
|
||||
SilverBullet 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 [Preact](https://preactjs.com).
|
||||
[ESBuild]([https://parceljs.org/](https://esbuild.github.io)) is used to build both the front-end and
|
||||
|
@ -11,9 +11,6 @@ if (import.meta.main) {
|
||||
},
|
||||
});
|
||||
await bundle(args.watch, "mobile", "mobile/dist");
|
||||
await copy("mobile/index.html", `mobile/dist/index.html`, {
|
||||
overwrite: true,
|
||||
});
|
||||
if (!args.watch) {
|
||||
esbuild.stop();
|
||||
}
|
||||
|
@ -24,6 +24,6 @@ export async function fixCommand(_options: any, folder: string) {
|
||||
}
|
||||
}
|
||||
console.log(
|
||||
"Alright then, that should be it. Try running Silver Bullet again.",
|
||||
"Alright then, that should be it. Try running SilverBullet again.",
|
||||
);
|
||||
}
|
||||
|
@ -10,14 +10,14 @@ export function serveCommand(options: any, folder: string) {
|
||||
const bareMode = options.bare;
|
||||
|
||||
console.log(
|
||||
"Going to start Silver Bullet binding to",
|
||||
"Going to start SilverBullet binding to",
|
||||
`${hostname}:${port}`,
|
||||
);
|
||||
console.log("Serving pages from", pagesPath);
|
||||
|
||||
if (hostname === "127.0.0.1") {
|
||||
console.log(
|
||||
`_Note:_ Silver Bullet will only be available locally (via http://localhost:${port}), to allow outside connections, pass --host 0.0.0.0 as a flag.`,
|
||||
`_Note:_ SilverBullet will only be available locally (via http://localhost:${port}), to allow outside connections, pass --host 0.0.0.0 as a flag.`,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -66,6 +66,7 @@ export async function ensureAndLoadSettings(
|
||||
`Hello! And welcome to your brand new SilverBullet space!
|
||||
|
||||
<!-- #include [[💭 silverbullet.md/Getting Started]] -->
|
||||
Loading some onboarding content for you (but doing so does require a working internet connection)...
|
||||
<!-- /include -->`,
|
||||
);
|
||||
}
|
||||
|
@ -1,47 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||
<base href="/" />
|
||||
|
||||
<title>Silver Bullet</title>
|
||||
<script>
|
||||
Deno = {
|
||||
args: [],
|
||||
build: {
|
||||
arch: "x86_64",
|
||||
},
|
||||
env: {
|
||||
get(key) {
|
||||
// return undefined;
|
||||
},
|
||||
},
|
||||
errors: {
|
||||
AlreadyExists: class extends Error { },
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
margin: 0;
|
||||
height: 100%;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="/main.css" />
|
||||
<script type="module" src="/client.js"></script>
|
||||
<link rel="manifest" href="/manifest.json" -->
|
||||
<link rel="icon" type="image/x-icon" href="/favicon.png" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="sb-root"></div>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -17,6 +17,8 @@ cp -r dist_bundle/web/* website_build/
|
||||
|
||||
echo "And all plugs"
|
||||
cp -r dist_bundle/_plug/* website_build/fs/_plug/
|
||||
echo "And additional ones"
|
||||
curl https://raw.githubusercontent.com/silverbulletmd/silverbullet-mermaid/main/mermaid.plug.json > website_build/fs/_plug/mermaid.plug.json
|
||||
echo "But remove some plugs"
|
||||
rm -rf website_build/fs/_plug/{directive,plugmd,publish,share}.plug.json
|
||||
#echo "Copying netlify config files"
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
echo "Now building Silver Bullet bundle"
|
||||
echo "Now building SilverBullet bundle"
|
||||
curl -fsSL https://deno.land/install.sh | sh
|
||||
export PATH=~/.deno/bin:$PATH
|
||||
|
||||
|
@ -149,7 +149,7 @@ export class HttpServer {
|
||||
? "localhost"
|
||||
: this.hostname;
|
||||
console.log(
|
||||
`Silver Bullet is now running: http://${visibleHostname}:${this.port}`,
|
||||
`SilverBullet is now running: http://${visibleHostname}:${this.port}`,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,7 @@ await new Command()
|
||||
})
|
||||
.action(invokeFunction)
|
||||
// upgrade
|
||||
.command("upgrade", "Upgrade Silver Bullet")
|
||||
.command("upgrade", "Upgrade SilverBullet")
|
||||
.action(upgradeCommand)
|
||||
// version
|
||||
.command("version", "Get current version")
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<link rel="icon" type="image/x-icon" href="/favicon.png" />
|
||||
<title>Login to Silver Bullet</title>
|
||||
<title>Login to SilverBullet</title>
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
@ -55,7 +55,7 @@
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<h1>Login to <img src="/logo.png" style="height: 1ch;" /> Silver Bullet</h1>
|
||||
<h1>Login to <img src="/logo.png" style="height: 1ch;" /> SilverBullet</h1>
|
||||
</header>
|
||||
<form action="/.auth" method="POST">
|
||||
<input type="hidden" name="refer" value="" />
|
||||
@ -71,7 +71,7 @@
|
||||
<input type="submit" value="Login" />
|
||||
</div>
|
||||
<footer>
|
||||
<a href="https://silverbullet.md">What is Silver Bullet?</a>
|
||||
<a href="https://silverbullet.md">What is SilverBullet?</a>
|
||||
</footer>
|
||||
</form>
|
||||
|
||||
|
@ -3,10 +3,11 @@
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<meta name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||
<base href="/" />
|
||||
|
||||
<title>Silver Bullet</title>
|
||||
<title>SilverBullet</title>
|
||||
<script>
|
||||
Deno = {
|
||||
args: [],
|
||||
@ -40,7 +41,8 @@
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="sb-root"></div>
|
||||
<div id="sb-root">
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"short_name": "Silver Bullet",
|
||||
"name": "Silver Bullet",
|
||||
"short_name": "SilverBullet",
|
||||
"name": "SilverBullet",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/logo.png",
|
||||
|
@ -135,7 +135,7 @@ release.
|
||||
|
||||
## 0.1.3
|
||||
|
||||
* Silver Bullet now runs on Windows!
|
||||
* SilverBullet now runs on Windows!
|
||||
* Frontmatter support! You can now use front matter in your markdown, to do this
|
||||
start your page with `---` and end it with `---`. This will now be the
|
||||
preferred way to define page metadata (although the old way will still work).
|
||||
@ -287,7 +287,7 @@ release.
|
||||
default is `index`). When navigating to this page, the page name will
|
||||
"disappear" from the URL. That is, the index URL will simply be
|
||||
`http://localhost:3000/`.
|
||||
* This feature is now used in `website` and set to `Silver Bullet` there. To
|
||||
* This feature is now used in `website` and set to `SilverBullet` there. To
|
||||
also make the title look nicer when visiting https://silverbullet.md
|
||||
|
||||
---
|
||||
|
@ -1,5 +1,5 @@
|
||||
You can access the “markdown web” through SilverBullet directly. The idea of the the markdown web (we really need a better name) is simple: the Internet is a messy place — tracking everywhere, tons of banners and other stuff — let’s bring it back to the basics. How about Markdown?
|
||||
|
||||
SilverBullet supports navigating this markdown web via cloud links, they’re simply wiki links that start with “💭 “. For instance: [[💭 silverbullet.md/Silver Bullet]]. When you click one of these links, SilverBullet will simply pull in its content and present it to you in read-only mode (and do some clever internal link rewriting). What it does is simply fetch the link via HTTPs and postfixes the url with `.md`, so [[💭 silverbullet.md/Silver Bullet]] will simply fetch [this page](https://silverbullet.md/Silver%20Bullet.md). You can access all of the SilverBullet website this way, for instance here’s the [[💭 silverbullet.md/CHANGELOG]].
|
||||
SilverBullet supports navigating this markdown web via cloud links, they’re simply wiki links that start with “💭 “. For instance: [[💭 silverbullet.md/SilverBullet]]. When you click one of these links, SilverBullet will simply pull in its content and present it to you in read-only mode (and do some clever internal link rewriting). What it does is simply fetch the link via HTTPs and postfixes the url with `.md`, so [[💭 silverbullet.md/SilverBullet]] will simply fetch [this page](https://silverbullet.md/Silver%20Bullet.md). You can access all of the SilverBullet website this way, for instance here’s the [[💭 silverbullet.md/CHANGELOG]].
|
||||
|
||||
To publish your own content this way, simply create an `index.md` on your host (this will be fetched as the main page), and publish all the rest of your content as `.md` files along side it. That’s all there’s to it.
|
26
website/Desktop.md
Normal file
26
website/Desktop.md
Normal file
@ -0,0 +1,26 @@
|
||||
SilverBullet is [available as a desktop application](https://github.com/silverbulletmd/silverbullet/releases) for:
|
||||
|
||||
* macOS (Intel and ARM)
|
||||
* Windows (64bit)
|
||||
* Linux (64bit Intel)
|
||||
|
||||
Why would you want to install SilverBullet as a desktop application, as opposed to the more mature [[Server]] version?
|
||||
|
||||
1. It’s simpler to get started for most: you don’t need to install Deno, or docker or whatnot. Instead, just download a single package file, install it and _go_.
|
||||
2. It auto updates (at least on Mac and Windows), so you don’t have to worry about upgrades.
|
||||
3. It’s easier to open multiple spaces without having to fiddle manually with starting multiple [[Server]] instances on different ports.
|
||||
|
||||
Why would you _not_ want to use the Desktop version? You’re limited to only access your space on your desktop computer, whereas the [[Server]] simply exposes SilverBullet as a web server you can access from multiple devices. You can use [[Sync]] to work around this issue, however.
|
||||
|
||||
Convinced? [visit the releases page](https://github.com/silverbulletmd/silverbullet/releases) to go download it.
|
||||
|
||||
## How it works
|
||||
What the SilverBullet desktop app technically does is spin up a SilverBullet [[Server]] locally on a random port, and then simply point a fancy looking window (with menus and stuff) at that local URL without all the usual browser chrome (hah, Chrome, funny).
|
||||
|
||||
What ships in the desktop package:
|
||||
|
||||
1. A copy of Deno for your operating system (this is just a single binary that’s included in the bundle).
|
||||
2. The current build of silverbullet.js (the everything-in-one bundle that you also download when you install the [[SilverBullet]] from get.silverbullet.md).
|
||||
3. [Electron](https://www.electronjs.org/)’s Chrome engine.
|
||||
|
||||
Functionally, both [[Server]] and [[Desktop]] are on par in terms of how they work and what runs on your computer (except that with the Desktop app you’re running yet another instance of Chrome — because that’s how Electron apps work).
|
5
website/Download.md
Normal file
5
website/Download.md
Normal file
@ -0,0 +1,5 @@
|
||||
You have three options to install and use SilverBullet. Pick your poison, as they say. Have a look at all three to decide what’s best for you:
|
||||
|
||||
1. [[Server]] — install SilverBullet as a web server on your local machine or network, and access it via any web browser. This is the best choice for nerds 🤓.
|
||||
2. [[Desktop]] — install SilverBullet as a desktop application, editing a local folder of files. This is the best option for casual users.
|
||||
3. [[Mobile]] — install SilverBullet as a “native” mobile application (native: as in — distributed via the app store, and with an icon on your home screen). This is the best option for people with phones. More specifically, people with phones that don’t want to access the [[Server]] via their mobile browser, or have anxiety around Internet connectivity.
|
@ -13,9 +13,9 @@ Here is an example:
|
||||
## This is a section
|
||||
This is content
|
||||
|
||||
Silver Bullet allows arbitrary metadata to be added to pages this way, with two exceptions:
|
||||
SilverBullet allows arbitrary metadata to be added to pages this way, with two exceptions:
|
||||
|
||||
* `name` is an attribute used for page names, so don’t attempt to override it in frontmatter
|
||||
* `tags` can be specified (as in the example) and are in effect another way of adding tags to your page, you can achieve the same result by simply adding hashtags in the body of your document, e.g. `#tag1 #tag2`.
|
||||
|
||||
Silver Bullet also has the _convention_ of using attributes starting with a `$` for internal use. For instance, the sharing capability uses the `$share` attribute, and `$disableDirectives: true` has the special meaning of disabling [[🔌 Directive]] processing on a page.
|
||||
SilverBullet also has the _convention_ of using attributes starting with a `$` for internal use. For instance, the sharing capability uses the `$share` attribute, and `$disableDirectives: true` has the special meaning of disabling [[🔌 Directive]] processing on a page.
|
@ -1,26 +1,43 @@
|
||||
## Getting started
|
||||
The best way to get a good feel for what SilverBullet is like to use, is to get your hands dirty (after washing your hands first, always wash your hands before touching a keyboard).
|
||||
---
|
||||
$disableDirectives: true
|
||||
---
|
||||
|
||||
Here are some things for you to try _right now_:
|
||||
## Getting started
|
||||
The best way to get a good feel for what SilverBullet is like to use is to get your hands dirty. Not literally, that would be disgusting — wash your hands _before_ using SilverBullet please, keyboards are gross enough already, and before you say “but I’m using this on mobile” — don’t even get me started on mobile phone screens.
|
||||
|
||||
After your hands are properly washed, here are some things for you to try:
|
||||
|
||||
* Click on the page picker (book icon) icon at the top right, or hit `Cmd-k` (Mac) or `Ctrl-k` (Linux and Windows) to open the **page switcher**.
|
||||
* Type the name of a non-existent page to create it.
|
||||
* You can pages in folders (if you’re into that type of thing) simply by putting slashes (`/`) in the name (even on Windows), e.g. [[My Folder/My Page]] (note that although you only see the last bit of the name in live preview, the page is in fact nested in a folder).
|
||||
* Click on the terminal button (top right) or hit `Cmd-/` (Mac) or `Ctrl-/` (Linux and Windows) to open the **command palette** (note that not all commands will work in this mode). On mobile you can tap the screen with 3 fingers at the same time to open the command palette.
|
||||
* You _can_ create pages in folders (if you’re into that type of thing) simply by putting slashes (`/`) in the name (even on Windows), e.g. [[My Folder/My Page]] (note that although you only see the last bit of the name in live preview, the page is in fact nested in a folder).
|
||||
* Click on the terminal icon (top right), hit `Cmd-/` (Mac) or `Ctrl-/` (Linux and Windows), or tap the screen with 3 fingers at the same time (on mobile) to open the **command palette**. The {[Stats: Show]} one is a safe one to try.
|
||||
* Select some text and hit `Alt-m` to ==highlight== it, or `Cmd-b` (Mac) or `Ctrl-b` (Windows/Linux) to make it **bold**, or `Cmd-i` (Mac) or `Ctrl-i` (Windows/Linux) to make it _italic_.
|
||||
* Click a link somewhere on this page to navigate there. When you link to a [[New Page]] it will initially show up in red (to indicate it does not yet exist), but once you click it — you will create the page automatically (only for real when you actually enter some text).
|
||||
* Start typing `[[` somewhere to insert a page link (with completion).
|
||||
* Start typing `[[` somewhere to insert your own page link (with completion).
|
||||
* [ ] Tap this box 👈 to mark this task as done.
|
||||
* Start typing `:party` to trigger the emoji picker 🎉
|
||||
* Type `/` somewhere in the text to invoke a **slash command**.
|
||||
* Hit `Cmd-p` (Mac) or `Ctrl-p` (Windows, Linux) to show a preview for the current page on the side.
|
||||
* Click this button {[Editor: Toggle Vim Mode]} to toggle Vim mode
|
||||
* If this is matching your personality type, you can click this button {[Editor: Toggle Vim Mode]} to toggle Vim mode. If you cannot figure out how to exit it, just click that button again. _Phew!_
|
||||
|
||||
Note that as you move your cursor around on this page and you get close to or “inside” marked up text, you will get to see the underlying [[💭 silverbullet.md/Markdown|Markdown]] code, this is what we refer to as “live preview” — generally your text looks clean, but you still can see what’s under the covers. To move your cursor somewhere by mouse without navigating or activating (e.g. a wiki, regular link, or a button) hold `Alt` when you click.
|
||||
Notice that as you move your cursor around on this page and you get close to or “inside” marked up text, you will get to see the underlying [[💭 silverbullet.md/Markdown|Markdown]] code. This experience is what we refer to as “live preview” — generally your text looks clean, but you still can see what’s under the covers and edit it directly, as opposed to [WYSIWYG](https://en.wikipedia.org/wiki/WYSIWYG) that some other applications use. To move your cursor somewhere using your mouse without navigating or activating (e.g. a wiki, regular link, or a button) hold `Alt` when you click. Holding `Cmd` or `Ctrl` when clicking a link will open it in a new tab or window.
|
||||
|
||||
Hadn’t we mentioned [[💭 silverbullet.md/Markdown|Markdown]] yet? Yeah, that’s the markup language you’ll use to markup your documents. It’s pretty simple to learn if you don’t know it already.
|
||||
Hadn’t we mentioned [[💭 silverbullet.md/Markdown|Markdown]] yet? Yeah, that’s the markup language you’ll use to add that dash of markup to your documents. It’s pretty simple to learn if you don’t know it already.
|
||||
|
||||
You will notice this whole page block is wrapped in a [[💭 silverbullet.md/%F0%9F%94%8C_Directive|Directive]] (in this case `#include`), which means that its content is automatically updated every time you run the {[Directives: Update]} command or navigate back to the page. In the case of `#include` this means the body will be replaced with the page included, so don’t be surprised when whatever you update inside of this directive block will be undone later. Just sayin’. [[💭 silverbullet.md/%F0%9F%94%8C_Directive|Directives]] are a powerful feature, so you should definitely look into them once you get comfortable with the basics.
|
||||
You will notice this whole page section is wrapped in a strange type of block. This is a SilverBullet specific feature called a [[💭 silverbullet.md/%F0%9F%94%8C_Directive|Directive]] (in this case `#include`). There are various types of directives, and while we’re not keeping score, likely the coolest ones are [[💭 silverbullet.md/%F0%9F%94%8C_Directive/Query|queries]] — so you should definitely look into those.
|
||||
|
||||
Don’t believe me, check this out, here’s a list of (max 10) pages in your space ordered by last modified date, it updates (somewhat) dynamically 🤯. Create some new pages and come back here to see that it works:
|
||||
|
||||
<!-- #query page select name order by lastModified desc limit 10 -->
|
||||
If you’re seeing this, something didn’t update quite right...
|
||||
<!-- /query -->
|
||||
|
||||
That said, the directive used wrapping this page section is `#include` which simply inlines the content of another page into the current one. Directives recalculate their bodies in two scenarios:
|
||||
|
||||
1. When you load/switch to a page
|
||||
2. When you explicitly run the {[Directives: Update]} command
|
||||
|
||||
In the case of `#include` this means the body will again be replaced with the page included, so don’t be surprised when whatever you just updated inside of this directive block will be undone later. Just sayin’. [[💭 silverbullet.md/%F0%9F%94%8C_Directive|Directives]] are a powerful feature, so you should definitely look into them once you get comfortable with the basics.
|
||||
|
||||
Feel free to completely remove all content on this page and make it your own, it’s just to get you started.
|
||||
|
||||
@ -28,4 +45,6 @@ Feel free to completely remove all content on this page and make it your own, it
|
||||
Generally, you can find more information about SilverBullet on its official website. You have two ways to access it:
|
||||
|
||||
1. Through its [regular website link](https://silverbullet.md/)
|
||||
2. Directly, through your local SilverBullet instance using [[💭 silverbullet.md/Cloud Links]]: [[💭 silverbullet.md/Silver Bullet]] (note that all of these will be read-only, for obvious reasons)
|
||||
2. Directly without leaving SilverBullet, through [[💭 silverbullet.md/Cloud Links]], just click on this: [[💭 silverbullet.md/SilverBullet]] (note that all of these will be read-only, for obvious reasons)
|
||||
|
||||
To keep up with the latest and greatest going-ons in SilverBullet land, keep an eye on the [[💭 silverbullet.md/CHANGELOG]], regularly update your SilverBullet instance (`silverbullet upgrade` if you’re running the Deno version). If you run into any issues or have ideas on how to make SilverBullet even awesomer (yes, that’s a word), [join the conversation on GitHub](https://github.com/silverbulletmd/silverbullet).
|
@ -1,3 +1,3 @@
|
||||
Silver Bullet uses a “live preview” markdown editor. This mechanism is heavily inspired by [Obsidian’s live preview mode](https://help.obsidian.md/Live+preview+update).
|
||||
SilverBullet uses a “live preview” markdown editor. This mechanism is heavily inspired by [Obsidian’s live preview mode](https://help.obsidian.md/Live+preview+update).
|
||||
|
||||
It reduces visual noise by not constantly showing [[Markdown]] codes such as `[this is a link](https://to.some.url)`, only showing the underlying Markdown when the cursor is placed inside.
|
@ -1,6 +1,8 @@
|
||||
Markdown is a plain text formatting system [originally developed by John Gruber](https://daringfireball.net/projects/markdown/). It has since been standardized into [CommonMark](https://commonmark.org/), which is what Silver Bullet uses (with some extensions).
|
||||
Markdown is a plain text formatting system [originally developed by John Gruber](https://daringfireball.net/projects/markdown/). It has since been standardized into [CommonMark](https://commonmark.org/), which is what SilverBullet uses (with some extensions).
|
||||
|
||||
Specifically, Silver Bullet supports the following extensions to common mark:
|
||||
If you’re not yet familiar with Markdown [here is a good guide to get you started](https://www.markdownguide.org/basic-syntax/).
|
||||
|
||||
We mentioned markdown _extensions_, here are the ones currently supported:
|
||||
|
||||
* [[Frontmatter]]
|
||||
* Double-bracketed wiki links: `[[link to page]]`, optionally with aliases `[[link to page|alias]]`.
|
||||
|
7
website/Mobile.md
Normal file
7
website/Mobile.md
Normal file
@ -0,0 +1,7 @@
|
||||
There is a “native” mobile app under development (the code [lives here](https://github.com/silverbulletmd/silverbullet/tree/main/mobile)). Initially, it will be offered for iOS (and iPadOS), but soon thereafter an Android version is planned.
|
||||
|
||||
The mobile app is built using [CapacitorJS](https://capacitorjs.com/) and therefore cross-platform. It essentially wraps the existing web app, and swaps out the server calls to local on-device APIs, such as using the local filesystem to store content (pages and attachments), uses a local SQLite database, and it runs all [[🔌 Plugs]] code on device. It is capable of fully running offline.
|
||||
|
||||
The mobile app keeps its files in the sandboxed file system of the SilverBullet app. These files are accessible via iOS file sharing capability (when you plug in your device via USB, you can see all files, copy new ones and remove them), and are included with the regular iOS backups.
|
||||
|
||||
In the very likely scenario you’d like to synchronize with your space e.g. on [[Desktop]] or a [[Server]], you’ll need to use [[Sync]].
|
@ -1,6 +1,6 @@
|
||||
```
|
||||
This file lists all plugs that SilverBullet will load. Run the {[Plugs: Update]} command to update and reload this list of plugs.
|
||||
|
||||
```yaml
|
||||
- github:silverbulletmd/silverbullet-git/git.plug.json
|
||||
- github:silverbulletmd/silverbullet-mermaid/mermaid.plug.json
|
||||
```
|
@ -1,6 +1,6 @@
|
||||
```yaml
|
||||
title: Silver Bullet
|
||||
title: SilverBullet
|
||||
publishAll: true
|
||||
indexPage: Silver Bullet
|
||||
indexPage: SilverBullet
|
||||
footerPage: website-footer
|
||||
```
|
||||
|
@ -32,7 +32,7 @@ $ source ~/.bashrc
|
||||
$ deno -V
|
||||
```
|
||||
|
||||
Then, just follow the standard [[Silver Bullet]] installation instructions:
|
||||
Then, just follow the standard [[SilverBullet]] installation instructions:
|
||||
|
||||
```shell
|
||||
$ deno install -f --name silverbullet -A --unstable https://get.silverbullet.md
|
||||
|
@ -2,5 +2,5 @@ This page contains settings for configuring SilverBullet and its Plugs. Any
|
||||
changes outside of the yaml block will be overwritten.
|
||||
|
||||
```yaml
|
||||
indexPage: Silver Bullet
|
||||
indexPage: SilverBullet
|
||||
```
|
||||
|
@ -1,6 +1,6 @@
|
||||
What does Silver Bullet look like? Well, have a look around. **You’re looking at it at this very moment!** 🤯
|
||||
What does SilverBullet look like? Well, have a look around. **You’re looking at it at this very moment!** 🤯
|
||||
|
||||
Note that what you’re looking at is not a fully functional version, because the _back-end is read-only_. That said, it should give you some feel for what it’s like to use SB before making the commitment of running a single `deno` command (see here: [[Silver Bullet]]) to download and run it locally in its fully functioning mode.
|
||||
Note that what you’re looking at is not a fully functional version, because the _back-end is read-only_. That said, it should give you some feel for what it’s like to use SB before making the commitment of running a single `deno` command (see here: [[SilverBullet]]) to download and run it locally in its fully functioning mode.
|
||||
|
||||
## Start playing
|
||||
So, feel free to make some edits in this space. Don’t worry, you won’t break anything, nothing is saved (just reload the page to see).
|
||||
@ -18,13 +18,13 @@ Here are some things to try:
|
||||
* Hit `Cmd-p` (Mac) or `Ctrl-p` (Windows, Linux) to show a live preview for the current page on the side, if your brain doesn’t speak native Markdown yet.
|
||||
* Open this site on your phone or tablet and… it just works!
|
||||
* Are you using a browser with **PWA support** (e.g. any Chromium-based
|
||||
browser)? Click on that little icon to the right of your location bar that says “Install Silver Bullet” to give SB its own window frame and desktop icon, like it is a stand-alone app (not particularly useful on silverbullet.md, but definitely do this once you install it yourself).
|
||||
browser)? Click on that little icon to the right of your location bar that says “Install SilverBullet” to give SB its own window frame and desktop icon, like it is a stand-alone app (not particularly useful on silverbullet.md, but definitely do this once you install it yourself).
|
||||
|
||||
Oh yeah, you can use fancy things like tables:
|
||||
|
||||
| Page | Comment |
|
||||
|----------|----------|
|
||||
| [[Silver Bullet]] | Main product page |
|
||||
| [[SilverBullet]] | Main product page |
|
||||
| [[CHANGELOG]] | The latest updates |
|
||||
|
||||
or code snippets, like JavaScript:
|
||||
@ -38,7 +38,7 @@ function helloWorld() {
|
||||
or YAML:
|
||||
|
||||
```yaml
|
||||
name: Silver Bullet
|
||||
name: SilverBullet
|
||||
rating: 5
|
||||
```
|
||||
|
||||
@ -53,4 +53,4 @@ There are a few features you don’t get to fully experience in this environment
|
||||
|
||||
That’s all, now go install this baby already!
|
||||
|
||||
Instructions here 👉 [[Silver Bullet]]
|
||||
Instructions here 👉 [[SilverBullet]]
|
||||
|
80
website/Server.md
Normal file
80
website/Server.md
Normal file
@ -0,0 +1,80 @@
|
||||
Installing SilverBullet as a (local) web server is the most mature, and most flexible way to install SilverBullet. If mature and flexible is your thing, try this option!
|
||||
|
||||
The idea is simple: you run the web server (instructions below), point your browser at it and _go, go, go_! You can access the URL via your desktop browser, but also a mobile one. This makes it a great option to access your space from various devices without requiring any type of sync. You could even go _full-on YOLO_ (that’s a technical term), and install it on a public cloud server somewhere and access it that way (be sure to at least enable authentication and put SSL on top of it, though).
|
||||
|
||||
You have two options to install and run SilverBullet as a server:
|
||||
|
||||
1. Installation via Deno on your host system
|
||||
2. Running it with Docker
|
||||
|
||||
## Installation via Deno
|
||||
This consists of two steps (unless Deno is already installed — in which case we’re down to one):
|
||||
|
||||
1. [Install Deno](https://deno.land/manual/getting_started/installation) (if you’re using a Raspberry Pi, follow [[Raspberry Pi Installation]]-specific instructions)
|
||||
2. Installing SilverBullet itself
|
||||
|
||||
### Install SilverBullet
|
||||
With Deno installed, run:
|
||||
|
||||
```shell
|
||||
deno install -f --name silverbullet -A --unstable https://get.silverbullet.md
|
||||
```
|
||||
|
||||
This will install `silverbullet` into your `~/.deno/bin` folder (which should already be in your `$PATH` if you followed the Deno install instructions).
|
||||
|
||||
To run SilverBullet, create a folder for your pages (it can be empty, or be an existing folder with `.md` files) and run the following command in your terminal:
|
||||
|
||||
```shell
|
||||
silverbullet <pages-path>
|
||||
```
|
||||
|
||||
By default, SilverBullet will bind to port `3000`, to use a different port use the `--port` flag.
|
||||
|
||||
For security reasons, by default SilverBullet only allows connections via `localhost` (or `127.0.0.1`). To also allow connections from the network, pass a `--hostname 0.0.0.0` flag (0.0.0.0 for all connections, or insert a specific address to limit the host), ideally combined with `--user username:password` to add BasicAuth password protection.
|
||||
|
||||
Once downloaded and booted, SilverBullet will print out a URL to open SB in your browser.
|
||||
|
||||
## Upgrading SilverBullet
|
||||
SilverBullet is regularly updated. To get the latest and greatest, simply run:
|
||||
|
||||
```shell
|
||||
silverbullet upgrade
|
||||
```
|
||||
|
||||
And restart SilverBullet. You should be good to go.
|
||||
|
||||
## Installing SilverBullet with Docker
|
||||
|
||||
There is a [docker image on docker hub](https://hub.docker.com/r/zefhemel/silverbullet). To use it, first create a volume to keep your space (markdown) files:
|
||||
|
||||
```shell
|
||||
docker volume create myspace
|
||||
```
|
||||
|
||||
Then, run the container, e.g. as follows:
|
||||
|
||||
```shell
|
||||
docker run -p 3000:3000 -v myspace:/space -d --name silverbullet zefhemel/silverbullet
|
||||
```
|
||||
|
||||
If you'd like to pass in additional command line arguments (e.g. `--user` to add authentication) you can just append those to the command, e.g.:
|
||||
|
||||
```shell
|
||||
docker run -p 3000:3000 -v myspace:/space -d --name silverbullet zefhemel/silverbullet --user me:letmein
|
||||
```
|
||||
|
||||
To build your own version of the docker image, run `./scripts/build_docker.sh`.
|
||||
|
||||
You can also use docker-compose if you prefer. From a silverbullet check-out run:
|
||||
|
||||
```shell
|
||||
PORT=3000 docker-compose up
|
||||
```
|
||||
|
||||
or similar.
|
||||
|
||||
To upgrade, simply pull the latest docker image (rebuilt and pushed after every commit to "main") and start the new container.
|
||||
|
||||
```shell
|
||||
docker pull zefhemel/silverbullet
|
||||
```
|
@ -1,13 +1,13 @@
|
||||
Silver Bullet is an extensible, [open source](https://github.com/silverbulletmd/silverbullet), **personal knowledge management** system. Indeed, that’s fancy talk for “a note-taking app with links.” However, Silver Bullet goes a bit beyond just that.
|
||||
|
||||
_Quick links:_ [Roadmap](https://github.com/orgs/silverbulletmd/projects/2/views/1), [[CHANGELOG]], [Issues](https://github.com/silverbulletmd/silverbullet/issues), [Discussions](https://github.com/silverbulletmd/silverbullet/discussions), [Zef on Mastodon](https://hachyderm.io/@zef), [Mattermost chat](https://silverbullet.cloud.mattermost.com/), [Docker Hub](https://hub.docker.com/r/zefhemel/silverbullet).
|
||||
SilverBullet is an extensible, [open source](https://github.com/silverbulletmd/silverbullet), **personal knowledge management** system. Indeed, that’s fancy talk for “a note-taking app with links.” However, SilverBullet goes a bit beyond _just_ that.
|
||||
|
||||
You’ve been told there is _no such thing_ as a [silver bullet](https://en.wikipedia.org/wiki/Silver_bullet). You were told wrong.
|
||||
|
||||
Let’s have a look at some of Silver Bullet’s features.
|
||||
Before we get to the nitty gritty, some _quick links_ for the impatient reader: [[Download]], [Roadmap](https://github.com/orgs/silverbulletmd/projects/2/views/1), [[CHANGELOG]], [Issues](https://github.com/silverbulletmd/silverbullet/issues), [Discussions](https://github.com/silverbulletmd/silverbullet/discussions), [Mastodon](https://hachyderm.io/@silverbullet), [Mattermost chat](https://silverbullet.cloud.mattermost.com/), [Docker Hub](https://hub.docker.com/r/zefhemel/silverbullet).
|
||||
|
||||
To start, let’s have a look at some of SilverBullet’s features.
|
||||
|
||||
## Features
|
||||
* Runs in any modern browser (including on mobile) and is installable as a [PWA](https://web.dev/progressive-web-apps/).
|
||||
* Runs in any modern browser (including on mobile) when run as a [[Server]], but can also be run ask a [[Desktop]] (and soon) [[Mobile]] app.
|
||||
* Provides an enjoyable [[Markdown]] writing experience with a clean UI, rendering text using [[Live Preview|live preview]] further **reducing visual noise**, while still providing direct access to the underlying markdown syntax.
|
||||
* Supports wiki-style **page linking** using the `[[page link]]` syntax, even keeping links up-to-date when pages are renamed.
|
||||
* Optimized for **keyboard-based operation**:
|
||||
@ -18,17 +18,17 @@ Let’s have a look at some of Silver Bullet’s features.
|
||||
* Experimental [[🔌 Collab|real-time collaboration support]].
|
||||
* Robust extension mechanism using [[🔌 Plugs]].
|
||||
* **Self-hosted**: you own your data. All content is stored as plain files in a folder on disk. Back up, sync, edit, publish, script with any additional tools you like.
|
||||
* Silver Bullet is [open source, MIT licensed](https://github.com/silverbulletmd/silverbullet) software.
|
||||
* SilverBullet is [open source, MIT licensed](https://github.com/silverbulletmd/silverbullet) software.
|
||||
|
||||
![Screencast screenshot](demo-video-screenshot.png)
|
||||
To get a good feel of what Silver Bullet is capable of, [have a look at this introduction video](https://youtu.be/VemS-cqAD5k).
|
||||
To get a good feel of what SilverBullet is capable of, [have a look at this introduction video](https://youtu.be/VemS-cqAD5k).
|
||||
|
||||
## Try it
|
||||
Here’s the kicker:
|
||||
|
||||
==You are looking at a (more or less) operational copy of Silver Bullet **right now**==.
|
||||
==You are looking at a (more or less) operational copy of SilverBullet **right now**==.
|
||||
|
||||
That’s right, **this very website is powered by Silver Bullet itself**. 🤯
|
||||
That’s right, **this very website is powered by SilverBullet itself**. 🤯
|
||||
|
||||
On this site, everything is editable just none of it persists (the back-end is read-only). So, edit away, reload the page and everything resets.
|
||||
|
||||
@ -46,13 +46,13 @@ Don’t just sit there, try it!
|
||||
* Click this button {[Editor: Toggle Vim Mode]} to toggle Vim mode
|
||||
* Open this site on your phone or tablet and... it just works!
|
||||
* Are you using a browser with **PWA support** (e.g. any Chromium-based
|
||||
browser)? Click on that little icon to the right of your location bar that says “Install Silver Bullet” to give SB its own window frame and desktop icon, like it is a stand-alone app (not particularly useful on silverbullet.md, but definitely do this once you install it yourself).
|
||||
browser)? Click on that little icon to the right of your location bar that says “Install SilverBullet” to give SB its own window frame and desktop icon, like it is a stand-alone app (not particularly useful on silverbullet.md, but definitely do this once you install it yourself).
|
||||
|
||||
Oh yeah, and you can use fancy things like tables:
|
||||
|
||||
| Page | Comment |
|
||||
|----------|----------|
|
||||
| [[Silver Bullet]] | Main product page |
|
||||
| [[SilverBullet]] | Main product page |
|
||||
| [[CHANGELOG]] | The latest updates |
|
||||
|
||||
or code snippets, like JavaScript:
|
||||
@ -66,7 +66,7 @@ function helloWorld() {
|
||||
or YAML:
|
||||
|
||||
```yaml
|
||||
name: Silver Bullet
|
||||
name: SilverBullet
|
||||
rating: 5
|
||||
```
|
||||
|
||||
@ -77,52 +77,26 @@ There are a few features you don’t get to fully experience in this environment
|
||||
* **Full-text search**.
|
||||
* **Extending** and updating SB’s functionality by installing additional [[🔌 Plugs]] (SB parlance for plug-ins) and writing your own.
|
||||
|
||||
## Download SilverBullet
|
||||
Has your mind been sufficiently blown to commit to an install? Took you long enough, alright then.
|
||||
|
||||
<!-- #include [[Download]] -->
|
||||
You have three options to install and use SilverBullet. Pick your poison, as they say. Have a look at all three to decide what’s best for you:
|
||||
|
||||
1. [[Server]] — install SilverBullet as a web server on your local machine or network, and access it via any web browser. This is the best choice for nerds 🤓.
|
||||
2. [[Desktop]] — install SilverBullet as a desktop application, editing a local folder of files. This is the best option for casual users.
|
||||
3. [[Mobile]] — install SilverBullet as a “native” mobile application (native: as in — distributed via the app store, and with an icon on your home screen). This is the best option for people with phones. More specifically, people with phones that don’t want to access the [[Server]] via their mobile browser, or have anxiety around Internet connectivity.
|
||||
<!-- /include -->
|
||||
|
||||
## Where to go from here
|
||||
Click on the links below to explore various aspects of Silver Bullet more in-depth:
|
||||
Click on the links below to explore various aspects of SilverBullet more in-depth:
|
||||
|
||||
* [[CHANGELOG]]: What’s new?
|
||||
* [[🔌 Plugs]]: extensions available in Silver Bullet
|
||||
* [[💡 Inspiration]]: some of the projects that inspired Silver Bullet
|
||||
* [[🔨 Development]]: how to start hacking on Silver Bullet itself
|
||||
|
||||
## Installing Silver Bullet
|
||||
This consists of two steps (unless Deno is already installed):
|
||||
|
||||
1. [Install Deno](https://deno.land/manual/getting_started/installation) (if you’re using a Raspberry Pi, follow [[Raspberry Pi Installation]]-specific instructions)
|
||||
2. Installing Silver Bullet itself
|
||||
|
||||
### Install Silver Bullet
|
||||
With Deno installed, run:
|
||||
|
||||
```shell
|
||||
deno install -f --name silverbullet -A --unstable https://get.silverbullet.md
|
||||
```
|
||||
|
||||
This will install `silverbullet` into your `~/.deno/bin` folder (which should already be in your `$PATH` if you followed the Deno install instructions).
|
||||
|
||||
To run Silver Bullet, create a folder for your pages (it can be empty, or be an existing folder with `.md` files) and run the following command in your terminal:
|
||||
|
||||
```shell
|
||||
silverbullet <pages-path>
|
||||
```
|
||||
|
||||
By default, Silver Bullet will bind to port `3000`, to use a different port use the `--port` flag.
|
||||
|
||||
For security reasons, by default Silver Bullet only allows connections via `localhost` (or `127.0.0.1`). To also allow connections from the network, pass a `--hostname 0.0.0.0` flag (0.0.0.0 for all connections, or insert a specific address to limit the host), ideally combined with `--user username:password` to add BasicAuth password protection.
|
||||
|
||||
Once downloaded and booted, Silver Bullet will print out a URL to open SB in your browser.
|
||||
|
||||
## Upgrading Silver Bullet
|
||||
Silver Bullet is regularly updated. To get the latest and greatest, simply run:
|
||||
|
||||
```shell
|
||||
silverbullet upgrade
|
||||
```
|
||||
|
||||
And restart Silver Bullet. You should be good to go.
|
||||
* [[🔌 Plugs]]: extensions available for, and as part of SilverBullet
|
||||
* [[💡 Inspiration]]: some of the projects that inspired SilverBullet
|
||||
* [[🔨 Development]]: how to start hacking on SilverBullet itself
|
||||
|
||||
## Support
|
||||
|
||||
If you (hypothetically) find bugs or have feature requests, post them in [our issue tracker](https://github.com/silverbulletmd/silverbullet/issues). Want to contribute? [Check out the code](https://github.com/silverbulletmd/silverbullet).
|
||||
|
||||
Want to chat with us? [We have a Mattermost instance](https://silverbullet.cloud.mattermost.com/), join us!
|
39
website/Sync.md
Normal file
39
website/Sync.md
Normal file
@ -0,0 +1,39 @@
|
||||
SilverBullet now has a sync engine. Let’s still consider it _experimental_, but it’s ready for use.
|
||||
|
||||
The synchronization algorithm implemented is [pretty much this one described here](https://unterwaditzer.net/2016/sync-algorithm.html).
|
||||
|
||||
## Architecture
|
||||
You’ll use a single SilverBullet [[Server]] as your central synchronization space, then connect any other instances of SilverBullet (likely primarily [[Mobile]] and [[Desktop]] apps, but could also be other [[Server]] instances) to it. Each “client” instance keeps track of sync snapshots that it uses to figure out what files have changed where.
|
||||
|
||||
Let’s put this information in a graph, just because we can!
|
||||
|
||||
```mermaid
|
||||
graph TD;
|
||||
iPhone-->SB(SilverBullet Server);
|
||||
iPad-->SB;
|
||||
Desktop-->SB;
|
||||
OtherSB(Other Silver Bullet instance)-->SB;
|
||||
```
|
||||
|
||||
## Usage
|
||||
Here’s how to use SilverBullet’s sync functionality:
|
||||
|
||||
1. Set up a SilverBullet [[Server]] somewhere where all your other devices have access to it. This can be your local network, a VPN, or if you’re living the wild life — the public Internet (do put some SSL and authentication on it please).
|
||||
2. Connect any other SilverBullet instance (likely the [[Desktop]] or [[Mobile]] app) to it via the {[Sync: Configure]} command. This will ask for:
|
||||
* A URL to connect to (the URL of the SB server configured under (1))
|
||||
* A username and password (optional) if you run the server with the `--user myuser:mypass` flag (as you should)
|
||||
3. {[Sync: Sync]} performs a sync. It stores a local sync snapshot (basically a list of timestamps for all files in your space) in its local SQLite database every time.
|
||||
4. Check {[Show Logs]} for sync logs.
|
||||
|
||||
Right now, sync needs to be triggered manually, so run {[Sync: Sync]} whenever you feel a sync is warranted.
|
||||
|
||||
## The sync process
|
||||
1. The sync engine compares two file listings: the local one and remote one, and figures out which files have been added, changed and removed on both ends. It uses timestamps to determine changes. Note this doesn’t make any assumptions about clocks being in sync, timezones etc.
|
||||
2. In most cases, based on this info (together with the snapshot from the last sync) it should be obvious what to do, and it will do just do it.
|
||||
3. In case of a conflict — which would happen if files on both ends have been changed since the last sync, it will first pull down both files and compare their content. If they’re the same, no issues. If they’re different: a conflicting copy will be created with a name of `page name.conflicted.timestamp`. You’ll see those appear in your page list.
|
||||
|
||||
## Caveats
|
||||
* This is new code, and not been extremely thoroughly tested. Make backups.
|
||||
* The sync engine doesn’t synchronize `_plugs` code, so to update the plug list based on your [[PLUGS]] you have to manually run {[Plugs: Update]}.
|
||||
|
||||
So, if you’re ready for this. Go try it. We do recommend: make regular backups in case the proverbial shit hits the fan, don’t say we didn’t warn you!
|
@ -1,3 +1,3 @@
|
||||
YAML stands for “YAML Ain’t Markup Language.” More information can be found at [the YAML website](https://yaml.org/).
|
||||
|
||||
Silver Bullet uses YAML in various contexts, specifically [[Frontmatter]].
|
||||
SilverBullet uses YAML in various contexts, specifically [[Frontmatter]].
|
@ -1 +1 @@
|
||||
Moved to [[Silver Bullet]]
|
||||
Moved to [[SilverBullet]]
|
||||
|
@ -1,4 +1,4 @@
|
||||
|
||||
---
|
||||
©️ [[Silver Bullet]] authors.
|
||||
_Published with [Silver Bullet Publish](https://github.com/silverbulletmd/silverbullet-publish)._
|
||||
©️ [[SilverBullet]] authors.
|
||||
_Published with [SilverBullet Publish](https://github.com/silverbulletmd/silverbullet-publish)._
|
@ -1,4 +1,4 @@
|
||||
Inspiration for Silver Bullet comes primarily from
|
||||
Inspiration for SilverBullet comes primarily from
|
||||
[Obsidian](https://obsidian.md/) and its vast plug-in ecosystem (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.
|
||||
|
||||
|
@ -4,7 +4,7 @@ repo: https://github.com/silverbulletmd/silverbullet
|
||||
share-support: true
|
||||
---
|
||||
|
||||
The Collab plug implements real-time “Google Doc” style collaboration with other Silver Bullet users using the [Yjs](https://yjs.dev) library. It supports:
|
||||
The Collab plug implements real-time “Google Doc” style collaboration with other SilverBullet users using the [Yjs](https://yjs.dev) library. It supports:
|
||||
|
||||
* Real-time editing
|
||||
* Showing other participant’s cursors and selections
|
||||
@ -22,8 +22,8 @@ To use it:
|
||||
|
||||
1. Open a page you would like to collaborate on
|
||||
2. Run the {[Share: Collab]} command and select the collab server to use (an open one runs at `wss://collab.silverbullet.md`)
|
||||
3. Copy & paste the `collab:...` URI that is injected into the `$share` [[Frontmatter]] and send to a collaborator **or** if your collaborator is not (yet) a Silver Bullet user, you can use the silverbullet.md website (which is an SB instance) directly via the `https://silverbullet.md/collab:...` URL scheme.
|
||||
4. If your collaborator is an SB user, have them use the {[Share: Join Collab]} command, or directly open the `collab:...` URI as a page in Silver Bullet (both do the same).
|
||||
3. Copy & paste the `collab:...` URI that is injected into the `$share` [[Frontmatter]] and send to a collaborator **or** if your collaborator is not (yet) a SilverBullet user, you can use the silverbullet.md website (which is an SB instance) directly via the `https://silverbullet.md/collab:...` URL scheme.
|
||||
4. If your collaborator is an SB user, have them use the {[Share: Join Collab]} command, or directly open the `collab:...` URI as a page in SilverBullet (both do the same).
|
||||
5. If the collaborator wants to keep a persistent copy of the page collaborated page, they can simply _rename_ the page to something not prefixed with `collab:`. Everything will keep working for as long as the `collab:` will appear in the `$share` attribute of [[Frontmatter]]
|
||||
|
||||
## How it works
|
||||
|
@ -3,7 +3,7 @@ type: plug
|
||||
repo: https://github.com/silverbulletmd/silverbullet
|
||||
---
|
||||
|
||||
The core plug implements foundational functionality for Silver Bullet. It covers the following areas:
|
||||
The core plug implements foundational functionality for SilverBullet. It covers the following areas:
|
||||
|
||||
* [[🔌 Core/Indexing]]
|
||||
* [[🔌 Core/Templates]]
|
||||
|
@ -1,4 +1,4 @@
|
||||
Silver Bullet has a generic indexing infrastructure. Pages are reindexed upon saving, so about every second. Manual reindexing can be done running the {[Space: Reindex]} command.
|
||||
SilverBullet has a generic indexing infrastructure. Pages are reindexed upon saving, so about every second. Manual reindexing can be done running the {[Space: Reindex]} command.
|
||||
|
||||
The [[🔌 Core]] plug indexes the following:
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
Silver Bullet has infrastructure to “unfurl” — that is: replace with something nice — various types of URLs. Unfurling can be triggered by putting your cursor on any “naked” URL, and running the {[Link: Unfurl]} command.
|
||||
SilverBullet has infrastructure to “unfurl” — that is: replace with something nice — various types of URLs. Unfurling can be triggered by putting your cursor on any “naked” URL, and running the {[Link: Unfurl]} command.
|
||||
|
||||
Plugs can provide custom unfurls for specific URL patterns. For instance the [[🔌 Twitter]] plug provides the ability to unfurl tweets, and pull in their content.
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
Plug management using the [[PLUGS]] file is also implemented in the [[🔌 Core]] plug.
|
||||
|
||||
The optional [[PLUGS]] file is only processed when running the {[Plugs: Update]} command, in which case it will fetch all the listed plugs and copy them into the (hidden) `_plug/` folder in the user’s space. Silver Bullet loads these files on boot (or on demand after running the {[Plugs: Update]} command).
|
||||
The optional [[PLUGS]] file is only processed when running the {[Plugs: Update]} command, in which case it will fetch all the listed plugs and copy them into the (hidden) `_plug/` folder in the user’s space. SilverBullet loads these files on boot (or on demand after running the {[Plugs: Update]} command).
|
||||
|
||||
You can also use the {[Plugs: Add]} to add a plug, which will automatically create a [[PLUGS]] if it does not yet exist.
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
Slash commands are built-in to Silver Bullet. You can trigger them by typing a `/` in your text (after whitespace).
|
||||
Slash commands are built-in to SilverBullet. You can trigger them by typing a `/` in your text (after whitespace).
|
||||
|
||||
The [[🔌 Core]] plug provides a few helpful ones:
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
Tags in Silver Bullet can be added in two ways:
|
||||
Tags in SilverBullet can be added in two ways:
|
||||
|
||||
1. Through the `tags` attribute in [[Frontmatter]]
|
||||
2. By putting a `#tag` at the top level (to tag a page), or at the task or item level to tag those blocks specifically.
|
||||
|
@ -117,7 +117,7 @@ Templates are predefined formats to render the body of the query.
|
||||
|
||||
It is pretty easy. You just need to create a new page. However, it is
|
||||
recommended to create your templates using `template/[TEMPLATE_NAME]`
|
||||
convention. For this guide, we will create `template/plug` to display list of Plugs available in Silver Bullet. We will use this template in the Examples section below.
|
||||
convention. For this guide, we will create `template/plug` to display list of Plugs available in SilverBullet. We will use this template in the Examples section below.
|
||||
|
||||
#### 5.2 What is the syntax?
|
||||
|
||||
@ -127,7 +127,7 @@ We are using Handlebars which is a simple templating language. It is using doubl
|
||||
|
||||
Let me break it down for you
|
||||
|
||||
- `*` is creating a bullet point for each item in Silver Bullet
|
||||
- `*` is creating a bullet point for each item in SilverBullet
|
||||
- `[[{{name}}]]` is injecting the name of Plug and creating an internal link to
|
||||
the page of the Plug
|
||||
- `**{{author}}**` is injecting the author of the Plug and making it bold
|
||||
|
@ -7,7 +7,7 @@ share-support: true
|
||||
---
|
||||
|
||||
<!-- #include [[https://raw.githubusercontent.com/silverbulletmd/silverbullet-ghost/main/README.md]] -->
|
||||
# Ghost plug for Silver Bullet
|
||||
# Ghost plug for SilverBullet
|
||||
|
||||
This allows you to publish your pages as [Ghost](https://ghost.org/) pages or posts. I use it to publish [Zef+](https://zef.plus).
|
||||
|
||||
@ -28,7 +28,7 @@ Then, create a Custom Integration (in your Ghost control panel under Settings >
|
||||
```
|
||||
|
||||
## Usage
|
||||
The plugin hooks into Silver Bullet's [Share infrastructure](https://silverbullet.md/%F0%9F%94%8C_Share). Therefore to share a page as either a Ghost page or post, add a `$share` front matter key. For posts this should take the shape of:
|
||||
The plugin hooks into SilverBullet's [Share infrastructure](https://silverbullet.md/%F0%9F%94%8C_Share). Therefore to share a page as either a Ghost page or post, add a `$share` front matter key. For posts this should take the shape of:
|
||||
|
||||
---
|
||||
$share:
|
||||
|
@ -9,7 +9,7 @@ author: Bertjan Broeksema
|
||||
# SilverBullet plug for showing a graph view of the documents
|
||||
|
||||
This plug aims to bring similar functionality as the Obsidian Graph view to
|
||||
Silver Bullet.
|
||||
SilverBullet.
|
||||
|
||||
## Installation
|
||||
|
||||
|
@ -6,7 +6,7 @@ author: Zef Hemel
|
||||
---
|
||||
|
||||
<!-- #include [[https://raw.githubusercontent.com/silverbulletmd/silverbullet-katex/main/README.md]] -->
|
||||
# Silver Bullet KaTeX plug
|
||||
# SilverBullet KaTeX plug
|
||||
|
||||
## Installation
|
||||
Run the {[Plugs: Add]} command and paste in: `github:silverbulletmd/silverbullet-katex/katex.plug.json`
|
||||
@ -26,7 +26,7 @@ And move your cursor outside of the block to live preview it!
|
||||
**Note:** [KaTeX](https://katex.org) itself is not bundled with this plug, it pulls the JavaScript, CSS and fonts from the JSDelivr CDN. This means _this plug will not work without an Internet connection_. The reason for this limitation is that it is not yet possible to distribute font files via plugs, and KaTeX depends on specific web fonts.
|
||||
|
||||
## Build
|
||||
Assuming you have Deno and Silver Bullet installed, simply build using:
|
||||
Assuming you have Deno and SilverBullet installed, simply build using:
|
||||
|
||||
```shell
|
||||
deno task build
|
||||
|
@ -7,12 +7,12 @@ share-support: true
|
||||
---
|
||||
|
||||
<!-- #include [[https://raw.githubusercontent.com/silverbulletmd/silverbullet-mattermost/main/README.md]] -->
|
||||
# Mattermost for Silver Bullet
|
||||
# Mattermost for SilverBullet
|
||||
This plug provides various integrations with the [Mattermost suite](https://www.mattermost.com) of products. Please follow the installation, configuration sections, and have a look at the example.
|
||||
|
||||
Features:
|
||||
|
||||
* Integration with [Silver Bullet Share](https://silverbullet.md/%F0%9F%94%8C_Share), allowing you to publish and update a page as a post on Mattermost, as well as load existing posts into SB as a page using the {[Share: Mattermost Post: Publish]} (to publish an existing page as a Mattermost post) and {[Share: Mattermost Post: Load]} (to load an existing post into SB) commands.
|
||||
* Integration with [SilverBullet Share](https://silverbullet.md/%F0%9F%94%8C_Share), allowing you to publish and update a page as a post on Mattermost, as well as load existing posts into SB as a page using the {[Share: Mattermost Post: Publish]} (to publish an existing page as a Mattermost post) and {[Share: Mattermost Post: Load]} (to load an existing post into SB) commands.
|
||||
* Access your saved posts via the `mm-saved` query provider
|
||||
* Unfurl support for posts (after dumping a permalink URL to a post in a page, use the {[Link: Unfurl]} command).
|
||||
* Boards support is WIP
|
||||
|
@ -6,8 +6,8 @@ author: Zef Hemel
|
||||
---
|
||||
|
||||
<!-- #include [[https://raw.githubusercontent.com/silverbulletmd/silverbullet-mermaid/main/README.md]] -->
|
||||
# Silver Bullet plug for Mermaid diagrams
|
||||
This plug adds basic [Mermaid](https://mermaid.js.org/) support to Silver Bullet.
|
||||
# SilverBullet plug for Mermaid diagrams
|
||||
This plug adds basic [Mermaid](https://mermaid.js.org/) support to SilverBullet.
|
||||
|
||||
**Note:** The Mermaid library itself is not bundled with this plug, it pulls the JavaScript from the JSDelivr CDN. This means _this plug will not work without an Internet connection_. The reason for this is primarily plug size (bundling the library would amount to 1.1MB). This way Mermaid is only loaded on pages with actual Mermaid diagrams rather than on every SB load.
|
||||
|
||||
@ -28,7 +28,7 @@ Put a mermaid block in your markdown:
|
||||
And move your cursor outside of the block to live preview it!
|
||||
|
||||
## Build
|
||||
Assuming you have Deno and Silver Bullet installed, simply build using:
|
||||
Assuming you have Deno and SilverBullet installed, simply build using:
|
||||
|
||||
```shell
|
||||
deno task build
|
||||
|
@ -1,4 +1,4 @@
|
||||
Silver Bullet at its core is bare bones in terms of functionality, most of its power it gains from **plugs**.
|
||||
SilverBullet 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’s part of the silverbullet repo) that runs “plug” code on the server in Deno web workers ([with severely locked down permissions](https://deno.land/manual@v1.28.2/runtime/workers#instantiation-permissions)), and in the browser using web workers.
|
||||
|
||||
@ -15,7 +15,7 @@ Each plug runs in its own _sandboxed environment_ and communicates with SB via _
|
||||
Plugs are distributed as self-contained JSON files (ending with `.plug.json`). Upon boot, SB will load all core plugs bundled with SB itself (listed below), as well as any additional plugs stored in the `_plug` folder in your space. Typically, management of plugs in the `_plug` folder is done using [[🔌 Core/Plug Management]].
|
||||
|
||||
## Core plugs
|
||||
These plugs are distributed with Silver Bullet and are automatically enabled:
|
||||
These plugs are distributed with SilverBullet and are automatically enabled:
|
||||
<!-- #query page where type = "plug" and uri = null order by name render [[template/plug]] -->
|
||||
* [[🔌 Collab]]
|
||||
* [[🔌 Core]]
|
||||
@ -42,7 +42,7 @@ These plugs are written either by third parties or distributed separately from t
|
||||
## How to develop your own plug
|
||||
The easiest way to get started is to click the “Use this template” on the [silverbullet-plug-template](https://github.com/silverbulletmd/silverbullet-plug-template) repo.
|
||||
|
||||
Generally, every plug consists of a YAML manifest file named `yourplugname.plug.yml`. This file defines all functions that form your plug. To be loadable by Silver Bullet (or any PlugOS-based system for that matter), it needs to be compiled into a JSON bundle (ending with `.plug.json`).
|
||||
Generally, every plug consists of a YAML manifest file named `yourplugname.plug.yml`. This file defines all functions that form your plug. To be loadable by SilverBullet (or any PlugOS-based system for that matter), it needs to be compiled into a JSON bundle (ending with `.plug.json`).
|
||||
|
||||
Generally, the way to do this is to run `silverbullet plug:compile` as follows:
|
||||
|
||||
|
@ -3,9 +3,9 @@ type: plug
|
||||
repo: https://github.com/silverbulletmd/silverbullet
|
||||
---
|
||||
|
||||
The Tasks plug implements a lot of the task support in Silver Bullet.
|
||||
The Tasks plug implements a lot of the task support in SilverBullet.
|
||||
|
||||
Tasks in Silver Bullet are written using semi-standard task syntax:
|
||||
Tasks in SilverBullet are written using semi-standard task syntax:
|
||||
|
||||
* [ ] This is a task
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
type: plug
|
||||
uri: github:silverbulletmd/silverbullet-twitter/twitter.plug.json
|
||||
repo: https://github.com/silverbulletmd/silverbullet-twitter
|
||||
author: Silver Bullet Authors
|
||||
author: SilverBullet Authors
|
||||
---
|
||||
|
||||
<!-- #include [[https://raw.githubusercontent.com/silverbulletmd/silverbullet-twitter/main/README.md]] -->
|
||||
@ -14,7 +14,7 @@ Currently the only thing this plug offers is unfurling links to tweets. To use,
|
||||
Turns into:
|
||||
|
||||
[Zef Hemel](https://twitter.com/zef/status/1547687321679511552):
|
||||
> For those who missed my earlier posts on Silver Bullet: it’s my new powerful note taking/PKM app. Demo video from a user’s perspective: https://t.co/MKauSTcUG3 How it works technically (plugins all the way down): https://t.co/sqCkAa0pem Repo: https://t.co/rrxQdyxze1
|
||||
> For those who missed my earlier posts on SilverBullet: it’s my new powerful note taking/PKM app. Demo video from a user’s perspective: https://t.co/MKauSTcUG3 How it works technically (plugins all the way down): https://t.co/sqCkAa0pem Repo: https://t.co/rrxQdyxze1
|
||||
|
||||
## Installation
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
## 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 [Preact](https://preactjs.com/). [ES Build](https://esbuild.github.io) is used to build both the front-end and back-end bundles. The server backend runs as a HTTP server on [Deno](https://deno.land/) using [Oak](https://oakserver.github.io/oak/).
|
||||
SilverBullet 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 [Preact](https://preactjs.com/). [ES Build](https://esbuild.github.io) is used to build both the front-end and back-end bundles. The server backend runs as a HTTP server on [Deno](https://deno.land/) using [Oak](https://oakserver.github.io/oak/).
|
||||
|
||||
## Development
|
||||
Requirements: [Deno](https://deno.land/) 1.28 or newer. If you are running Silver Bullet, you will already have Deno installed.
|
||||
Requirements: [Deno](https://deno.land/) 1.28 or newer. If you are running SilverBullet, you will already have Deno installed.
|
||||
|
||||
Clone the repository from Github:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user