(previously named "linkblocks")
🔗 A federated network to bookmark, organize, share and discover good web pages.
It's getting harder and harder to find good web pages. When you do find good ones, it's worth hanging onto them. ties is your own small corner of the web, where you can keep your favorite pages, and share them with your friends to help them find good web pages too.
🔭 ties is in an exploratory phase where we're trying out different ways to make it work well. You can try it out, but big and small things might change with every update.
- With ties, you can organize, connect, browse and search your favorite web pages.
- Share carefully curated or wildly chaotic collections of the stuff you really really like with other ties users and the whole world wide web.
- Follow users with a similar taste and get a feed of fresh good web pages every day. Browse others' collections to discover new web pages from topics you like.
- Annotate, highlight and discuss web pages together with your friends.
- Mark users as trusted whose standards for web pages match yours - and then search through all trusted bookmarks to find good pages on a specific topic. Add trusted users of your trusted users to your search range to cast a wider net.
See this blog post for more on the vision behind ties, and our docs on core values and goals.
- Where have all the Websites gone? talks about the importance of website curation. ties is for publicly curating websites.
- The Small Website Discoverability Crisis similar to the previous link, it encourages everyone to share reading lists. By the author of the amazing marginalia search engine.
We are looking for contributors! See the contributing guide to get started.
You can run the container at ghcr.io/raffomania/ties.
It's recommended to use the tag of the latest stable release, e.g. 0.1.0.
If you're feeling adventurous, there's a latest tag which tracks the latest commit on the main branch.
See doc/docker-compose.yml for an example configuration. Make sure to fill out the blank environment variables such as BASE_URL and the admin credentials, then start the server using docker-compose up. By default, the server will be exposed on port 3000.
Install the rust toolchain, version 1.88.0 or later. Then build the ties binary using:
cargo build --releaseIf git is installed, a version description will automatically be included by reading the current repository state.
You can set the environment variable TIES_VERSION_DESCRIPTION when building to override this with your own version description.
If the envionment variable is not set and git is not available, the description will be set to the current crate version in Cargo.toml.
ties is deployed using a single binary.
If you've built the binary or downloaded it from GitHub releases, you can run the server using ties start.
The only dependency is a PostgreSQL instance.
ties is configured through environment variables or command line options.
Run ties start --help to for comprehensive documentation on the available options.
Let's go over a few of the central knobs you might want to configure:
DATABASE_URL: PostgreSQL Connection URI for connecting to the database.BASE_URL: Public URL the server is reachable at. Cannot be changed once the first user has been created.LISTEN: IP address and port to listen on.ADMIN_USERNAME,ADMIN_PASSWORD(Optional): Create an admin user with these credentials if it doesn't exist yet.OIDC_CLIENT_ID,OIDC_CLIENT_SECRET,OIDC_ISSUER_URL,OIDC_ISSUER_NAME(Optional): Configuration for single-sign-on using an OIDC provider.TLS_CERT,TLS_KEY(Optional): Paths to TLS keypair, if you'd like to serve ties via TLS directly. If you don't set this, it's recommended to use a reverse proxy in front of ties.
By default, upgrades do not require manual intervention. The database is migrated automatically when the server starts.
If an upgrade does require manual intervention, it is marked with a new minor version (as long as we are pre-1.0), and will be called out prominently in the changelog.
Our Developer Docs should cover everything you need to know. If anything is missing, feel free to open an issue or ask a question in the discussions.
See Development Setup to get started with a local development environment.
This web app is implemented using technologies hand-picked for a smooth development and deployment workflow. Here are some of the features of the stack:
- Type-safe and fast, implemented in Rust using the axum framework
- Snappy interactivity using htmx with almost zero client-side code
- Tailwind styles without NodeJS, integrated into the cargo build process using build scripts
- Compile-time verified HTML templates using htmf
- Compile-time verified database queries using SQLx
- Concurrent, isolated integration tests with per-test in-memory postgres databases
- Single-binary deployment; all assets baked in
- Integrated TLS; can run without a reverse proxy
- PostgreSQL as the only service dependency
- Built-in CLI for production maintenance
- Auto-reload in development without dropped connections
An up-to-date Software Bill of Materials can be found in the ties.cdx.json file.
ties is made possible with a donation from NGI Zero Commons Fund. NGI Zero Commons Fund is part of the European Commission's Next Generation Internet initiative, established under the aegis of the DG Communications Networks, Content and Technology. Additional funding is made available by the Swiss State Secretariat for Education, Research and Innovation (SERI).