Aspen is a custom, keyword-based public search engine designed for a replacement for your bookmarks.
Codebase | Description |
---|---|
protos | Protobuf specs |
trunk | Rust gRPC server (authorization, db, keyword resolution) |
twig | Python HTTP interface |
foliage | React web frontend |
catkin | SwiftUI iOS frontend |
Aspen uses site search to allow you to quickly go to a page witout needing to point and click. Additionally, it doesn't rely on browser-specific customization, meaning your links will be preserved if you clear your browse cache/cookies, sign into a different account, use a different browser, or even a different computer.
Aspen is free and avalible at https://aspn.app, but can also be self hosted. Please refer to the following docker-compose.yml
:
version: '3.8'
services:
trunk:
image: "ghcr.io/erwijet/aspen/trunk:latest"
ports:
- 9000:9000
environment:
JWT_SECRET: "<your_jwt_secret>"
MONGO_CONNECTION_STR: "<your_conection_string>"
twig:
image: "ghcr.io/erwijet/aspen/twig:latest"
ports:
- 8000:8000
please note that if you choose to self host, you may need to update the URL targets in
twig
. They are hard-coded to point atapi.aspn.app
, but should be moved to an environment variable in a future release.
It is recommended to set up some sort of proxy to handle TLS. Addtionally, gRPC requires http2. Please refer to the example nginx config.
# trunk.example.com --> your-host.example.com:9000
server {
set $forward_scheme http;
set $server "your-host.example.com"; # <- change this
set $port 9000;
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name trunk.example.com; # <-- change this
include conf.d/include/letsencrypt-acme-challenge.conf;
include conf.d/include/ssl-ciphers.conf;
ssl_certificate /path/to/fullchain.pem; # <-- change this
ssl_certificate_key /path/to/privkey.pem; # <-- and this
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;
location / {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;
include conf.d/include/proxy.conf; # proxy
}
}
# api.example.com --> your-host.example.com:8000
server {
set $forward_scheme http;
set $server "your-host.example.com"; # <-- change this
set $port 8000;
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name api.example.com; # <-- and this
include conf.d/include/letsencrypt-acme-challenge.conf;
include conf.d/include/ssl-ciphers.conf;
ssl_certificate /path/to/fullchain.pem; # <-- also this
ssl_certificate_key /path/to/privkey.pem; # <-- and this
location / {
include conf.d/include/proxy.conf; # proxy
}
}