Expand description
☄️ bundlrs
Bundlrs is a rewrite of Bundles in Rust without some of the extra features.
Bundlrs is a super lightweight and anonymous social markdown platform featuring pastes with custom URLs, quick and full deletion, easy editing, live preview, advanced styling, and much more!
For migration from Bundles, please see #3.
Also Guppy for user authentication.
Install
Bundlrs provides build scripts using just. It is required that bun
, just
, redis
, and (obviously) Rust are installed before running.
Build:
# release (sqlite)
just
# release (mysql)
just build mysql
# release (postgres)
just build postgres
# documentation
just docs
Documentation is automatically built when building for release.
Run:
# test
just test
# release
just run
Bundlrs supports the features sqlite
, postgres
, and mysql
. These features dictate which database types will be used.
Configuration
Bundlrs is configured through flags given when running the server. The following flags are available:
--port 0000
optional (defaults to8080
)--static-dir "/path/to/dir
optional (defaults to./static
)--db-type "type"
optional (defaults tosqlite
)
Environment variables:
INFO
optional (defaults to/pub/info
)BODY_EMBED
optional (defaults to nothing)DB_HOST "host"
optional (defaults tolocalhost
) (only if--db-type
ispostgres
ormysql
)DB_USER "user"
required (only if--db-type
ispostgres
ormysql
)DB_PASS "pass"
required (only if--db-type
ispostgres
ormysql
)DB_NAME "name"
required (only if--db-type
ispostgres
ormysql
)SITE_NAME "name"
optional (defaults toBundlrs
)AUTH_REQUIRED
optional (defaults to(None)
), disables creating pastes without an accountREGISTRATION_DISABLED
optional (defaults to(None)
)
Features
- Bundlrs Info Page
- Markdown Info Page
- Secondary Formatting Examples
- Templates Info Page
- SSM Info Page
- API Docs
User Accounts
Users can register for an account with just a username. They are given a unique ID which will be used as their password. This ID is stored hashed on the server and cannot be reset.
User Permissions
ManagePastes
- Ability to manage (edit metadata, delete) any pasteManageBoards
- Ability to manage (edit metadata, delete, view even withis_private
) any boardManageBoardPosts
- Ability to manage (edit tags, delete) any board postEditBoardPosts
- Ability to manage (edit) any board postManageUsers
- Ability to manage (edit metadata, delete) any userStaffDashboard
- Ability to view the staff dashboard (/d/staff
), as well as be unable to be viewed in the user manager
Levels should be directly managed by managing entries in the Logs
table. Levels must have a logtype
value of level
. Their content
should be in a JSON-serialized format following the structure defined here. Their elevation
should be an int between -999
and 1000
. An elevation of -1000
is used for anonymous users.
Here’s an example content
value for a basic staff role with all permissions:
{
"elevation":5, "name":"staff", "permissions":[
"ManagePastes",
"ManageBoards",
"ManageBoardPosts",
"EditBoardPosts",
"ManageUsers",
"StaffDashboard"
]
}
Modules
- API Routes (“/api/…”)
- config 🔒
- Database
- Markdown Renderer
- Page Routes (“/…”)