Timeline

explore river

Every post and feed across this instance

  • 📝 0f8640e — feat(frontend): use url filter for absolute urls in default layout

    Commit sur main · 0f8640e · @paulrobertlloyd

    feat(frontend): use url filter for absolute urls in default layout

    Ouvrir sur GitHub →

  • 🐛 Issue #996 — Choose an existing media file from the editor and file fields

    Issue ouverte · Issue #996 Choose an existing media file from the editor and file fields · @rmdes

    Today the only way to reuse an uploaded file is to copy its URL from /files.

    I’d like to add a “Browse media” button next to the editor’s image upload button and next to file-input’s “Upload file” button. It would open a dialog listing the media endpoint’s files (q=source, paged by uid) and insert or fill in the chosen one. Built the way the other frontend components are: a native <dialog>, localised strings in the component template, the existing icons.

    I’ve run a version of this on my own site for a while; a screenshot of it follows.

    Ouvrir sur GitHub →

  • 🟢 PR #995 — fix(frontend): don't throw looking up elements that may be absent

    Pull request (OPEN) · PR #995 fix(frontend): don’t throw looking up elements that may be absent · @rmdes

    Fixes #994.

    Those four lookups go back to querySelector, with types that admit null; every other getElement call is unchanged. New tests mount file-input and geo-input as custom elements in jsdom and fail without the fix. They are the first component tests in the package, so tell me if you’d rather they live elsewhere.

    Found while running a build of main; worth having before beta 30.

    Ouvrir sur GitHub →

  • 🐛 Issue #994 — Frontend components drop the upload, find location and tag input set-up on main

    Issue ouverte · Issue #994 Frontend components drop the upload, find location and tag input set-up on main · @rmdes

    Since 691b359, component lookups throw when an element is missing. Four lookups are of elements that are absent by design, each followed by a null check the throw now makes unreachable:

    • file-input/index.js:48 and geo-input/index.js:30: the picker and the button live only in a <template> until connectedCallback clones them in.
    • tag-input/index.js:7-8: a hint and an error message are only rendered when given.
    • textarea/index.js:171: the status bar can be turned off with editor-status="false".

    The throw aborts connectedCallback, so on main the upload button next to photo, video, audio and featured URL fields, the find location button, and the category tag input are never set up. Nothing is lost (the URL fields and the editor’s own image upload still work), but those three are missing.

    Reproduction: open /posts/create?type=photo. There is no “Upload file” button next to the photo URL field, and the console shows No element matching .file-input__picker, No element matching .geo-input__button and No element matching .error-message.

    Ouvrir sur GitHub →

  • Secret of Orange Cats Revealed After 60-Year Search

  • GPT-Astra NFL Player Video Analysis

  • 🟢 PR #993 — Use `canonicalUrl` filter in Nunjucks templates, and show all configured endpoints on homepage

    Pull request (OPEN) · PR #993 Use canonicalUrl filter in Nunjucks templates, and show all configured endpoints on homepage · @paulrobertlloyd

    Somewhat related improvements:

    • Use canonicalUrl filter in all Nunjucks templates where an endpoint’s mount path (or frontend asset path) needs to be prefixed with the application URL
    • Remove the getEndpointUrls method that was used to provide a list of endpoint mount paths for use on the homepage guidance
    • Update home page guidance to list all s that can be added to a website’s ` to support installed/configured endpoints
    • Improve the wording of that guidance to be a bit less technical, and remove specific mention of Micropub now that we can show links for other endpoints

    Ouvrir sur GitHub →

  • A city-building game in which the city would prefer you didn't

    Article URL: https://housing.over.pizza/

    Comments URL: https://news.ycombinator.com/item?id=50036864

    Points: 530

    # Comments: 189

  • There has been no increase in car sales in China in over a decade

  • Proof-of-Human

  • What if it could learn and update its own weights as it's being used?

  • Where Google Wallet state IDs are available on Android

    States across the US are slowly rolling out support for adding your driver’s license or ID to the Google Wallet app on Android.

    more…
  • This Week In Techdirt History: October 4th – 10th

    This Week in 2016 This Week in 2011 This Week in 2006
  • Nvidia in talks to acquire US 'open' model startup Reflection AI

  • 📝 721f4dd — chore: update dependencies

    Commit sur main · 721f4dd · @paulrobertlloyd

    chore: update dependencies

    Ouvrir sur GitHub →

  • Vibe coded browser ports of Halo, The Simpsons: Hit And Run, GTA work well

  • 📝 f8c7376 — feat(endpoint-syndicate): syndicate every post awaiting syndication

    Commit sur main · f8c7376 · @rmdes

    A request without source_url syndicated one post, the oldest awaiting syndication, and stopped. The endpoint exists to be pinged after a deploy or on a schedule, so a backlog of several posts, which is what a deploy that publishes more than one post or an outage at a target leaves behind, needed as many pings as posts. Work through every post that still has a target to reach, oldest first and one at a time, recording each result on its post as before, and respond with a result per post. A target that fails is noted on its post and the batch carries on; an error updating a post stops the batch, and the posts not reached are still awaiting syndication for the next request. A request arriving while a batch is running is told so rather than syndicating the same posts again, since a deploy webhook and a scheduled request can coincide. Two tests sent the post URL as syndication.url, which the endpoint has never read (the form sends syndication.source_url, as the README documents). They passed because the fallback happened to pick the only post; they now send the documented parameter. The mock content store accepts more than one post so a test can seed a backlog.

    Ouvrir sur GitHub →

  • Why DuckDB 2.0 is faster

  • 📝 54f193e — feat(endpoint-share): let the share form choose syndication targets

    Commit sur main · 54f193e · @rmdes

    The share form sends a bookmark to the Micropub endpoint but offers no way to say where it should be syndicated, so a shared bookmark never reaches a syndicator unless the target is edited afterwards. Render a checkbox per configured target, as the post form does, and forward each chosen one as its own mp-syndicate-to parameter: URLSearchParams would otherwise join an array into one comma-separated value the Micropub endpoint does not match. A target whose info cannot be read is shown disabled with the reason, the same as the post form since the syndicator-info change. Tests load the two syndicators the test configuration already knows about and check the form renders a checkbox per target, that both chosen targets come back as separate values on the created post, and that a chosen target stays checked when the form is re-rendered with errors.

    Ouvrir sur GitHub →

  • FreeBSD Cope with Signal Fuckup

  • 📝 21624e4 — feat(endpoint-share): let the share form choose syndication targets

    Commit sur main · 21624e4 · @rmdes

    The share form sends a bookmark to the Micropub endpoint but offers no way to say where it should be syndicated, so a shared bookmark never reaches a syndicator unless the target is edited afterwards. Render a checkbox per configured target, as the post form does, and forward each chosen one as its own mp-syndicate-to parameter: URLSearchParams would otherwise join an array into one comma-separated value the Micropub endpoint does not match. A target whose info cannot be read is shown disabled with the reason, the same as the post form since the syndicator-info change. Tests load the two syndicators the test configuration already knows about and check the form renders a checkbox per target, that both chosen targets come back as separate values on the created post, and that a chosen target stays checked when the form is re-rendered with errors.

    Ouvrir sur GitHub →

  • 📝 2f89cd1 — feat(endpoint-posts): pre-fill the create form from url and name quer…

    Commit sur main · 2f89cd1 · @rmdes

    …y parameters A bookmarklet, a share sheet or a reader’s ‘Post’ button has a URL and usually a title to hand over, and the share endpoint already accepts them. The create form did not, so a client had to choose between the share form’s fixed bookmark and an empty post form. Accept url and name on /posts/create. The URL goes to the field the post type has for one (bookmark-of, in-reply-to, like-of or repost-of) and to the content where the type has none; the name only where the type has a name field. Anything already in the form wins, so a re-rendered form is not overwritten.

    Ouvrir sur GitHub →

  • 📝 b792c1a — feat(endpoint-micropub): filter the list of posts by text and category

    Commit sur main · b792c1a · @rmdes

    The README promises filter for every list query and gives /micropub?q=source&filter=web as the example, but the source query ignored it: the parameter only ever reached the configuration queries. Honour it for posts as a case-insensitive match on the name and content, and accept category alongside it for posts carrying that category. Filtering keeps paging: getCursor takes an optional query that is merged into the range condition and into the hasNext/hasPrev probes, so a filtered page reports whether more filtered items exist rather than whether more items exist at all. Existing callers are unaffected; the parameter defaults to an empty object. Tests cover the cursor filter in util, and for the endpoint: match by name, match by content, match by category, both together across two pages, and no match.

    Ouvrir sur GitHub →

  • 📝 77a6266 — fix(endpoint-micropub): normalise categories on write

    Commit sur main · 77a6266 · @rmdes

    A category arrives as typed. Surrounding whitespace, an empty value from a blank form field, and the same word in another case each became a distinct category on the site, and every list built from categories, the q=category query included, grew a near-duplicate for it. Trim each value, drop the empties, and fold case-insensitive duplicates onto the first spelling given, at the point where properties are normalised so every write path is covered. A category left with nothing is removed rather than stored as an empty array. Casing is otherwise left as the author wrote it: folding onto a canonical spelling is a separate question.

    Ouvrir sur GitHub →

  • Models as Insider Risks in the Super Intelligence Era

  • 📝 47b995d — fix(frontend): close the tabindex clause in add-another's focusable s…

    Commit sur main · 47b995d · @rmdes

    …elector The last clause of the selector was missing its closing parenthesis. Browsers recover from the error, which is why nothing visibly broke, but a selector that only works through parser error recovery is one engine update away from throwing, and it misleads anyone reading it.

    Ouvrir sur GitHub →

  • 💬 @paulrobertlloyd — PR #992 : feat(indiekit): declare a collection's indexes with addCollection

  • 📝 df0b8f8 — feat(indiekit): declare a collection's indexes with addCollection

    Commit sur main · df0b8f8 · @rmdes

    A plug-in declares the indexes a collection needs where it adds the collection, as an array of a key plus any createIndex options, and the core creates them once the database is connected and before serving. The literal posts and media list in index.js goes: the Micropub and media endpoints declare the properties.uid index themselves, and the Microsub endpoint declares its three instead of creating them at init.

    Ouvrir sur GitHub →

  • 📝 e8bc4df — feat(endpoint-microsub): add localised strings

    Commit sur main · e8bc4df · @paulrobertlloyd

    feat(endpoint-microsub): add localised strings

    Ouvrir sur GitHub →

  • 🟢 PR #992 — feat(indiekit): declare a collection's indexes with addCollection

    Pull request (OPEN) · PR #992 feat(indiekit): declare a collection’s indexes with addCollection · @rmdes

    Fixes #979.

    Indiekit.addCollection(name, indexes) takes an optional array of indexes, each a key plus any createIndex options such as unique. The core creates them in createIndexes(), called from server() after the plug-ins are installed and before serving; creating an existing index is a no-op, so it runs on every start.

    The literal posts and media loop in index.js goes: the Micropub and media endpoints declare { key: { "properties.uid": 1 } } where they add their collections, and the Microsub endpoint declares its three (channel + id unique, channel + uid unique, channel + url) instead of creating them at init. The uid backfill stays where it was. Docs page updated.

    Two core tests (declared indexes are created, a collection declares none by default); the Microsub index test moves with the declaration.

    Ouvrir sur GitHub →

  • 🟢 PR #991 — fix(endpoint-micropub): honour `filter` on `q=source`, add `category`

    Pull request (OPEN) · PR #991 fix(endpoint-micropub): honour filter on q=source, add category · @rmdes

    Fixes #990.

    filter is a case-insensitive match on a post’s name or content, category an exact category; both are cast to strings so nothing reaches the database as an operator, and both are passed to getCursor as its filter so paging keeps working within the match (the cursor’s filter option landed with #944).

    Four integration tests, seen failing first. README documents category.

    This is one of the last six changes ported from my fork; nothing here needs to hold a release.

    Ouvrir sur GitHub →

  • 🐛 Issue #990 — `q=source` ignores the documented `filter` parameter

    Issue ouverte · Issue #990 q=source ignores the documented filter parameter · @rmdes

    packages/endpoint-micropub/README.md:41 says list queries support filter, limit and offset. lib/controllers/query.js reads filter (line 32) but applies it only to configuration queries (line 121); the posts list returned by q=source never sees it.

    Reproduction: /micropub?q=source&filter=web returns every post.

    Ouvrir sur GitHub →

  • 🟢 PR #989 — feat(endpoint-syndicate): syndicate every post awaiting syndication per request

    Pull request (OPEN) · PR #989 feat(endpoint-syndicate): syndicate every post awaiting syndication per request · @rmdes

    Fixes #988.

    A request without source_url works through every published post that still has a target, oldest first, one at a time, and responds with a result per post; a second such request arriving while one runs is told syndication is already in progress. A request with source_url behaves as before.

    On the way: two existing tests sent syndication.url, a field the endpoint never read, and passed by coincidence; they now send source_url. The mock store replies persist so a batch can write several files.

    This is one of the last six changes ported from my fork; nothing here needs to hold a release.

    Ouvrir sur GitHub →

  • 🐛 Issue #988 — A syndication request without `source_url` handles one post only

    Issue ouverte · Issue #988 A syndication request without source_url handles one post only · @rmdes

    getPostData in packages/endpoint-syndicate/lib/utils.js:30-33 takes limit(1) and returns the oldest post awaiting syndication, so a deploy webhook or a scheduled request after a build syndicates one post per call. With several posts published between builds, the rest wait for as many further requests.

    Reproduction: publish two posts with mp-syndicate-to, POST /syndicate once: the first is syndicated, the second still has its target.

    Ouvrir sur GitHub →

  • 🟢 PR #987 — feat(endpoint-posts): pre-fill the create form from the query string

    Pull request (OPEN) · PR #987 feat(endpoint-posts): pre-fill the create form from the query string · @rmdes

    Fixes #986.

    url goes to the post type’s URL field (bookmark-of, in-reply-to, like-of or repost-of), or to its content when the type has none; name only where the type has a name field. Anything already in the form wins. README gains a section mirroring the share endpoint’s.

    Three integration tests, seen failing first.

    This is one of the last six changes ported from my fork; nothing here needs to hold a release.

    Ouvrir sur GitHub →

  • 🐛 Issue #986 — Post creation form cannot be pre-filled from the query string

    Issue ouverte · Issue #986 Post creation form cannot be pre-filled from the query string · @rmdes

    packages/endpoint-posts/lib/middleware/post-data.js:20 reads only type from the query. The share endpoint documents url, name and content pre-filling, so a bookmarklet or a reader’s post button can hand over a page; the posts endpoint cannot, which rules out a pre-filled reply, like, repost or bookmark.

    Reproduction: /posts/create?type=bookmark&url=https://example.website/article&name=An+article renders an empty form.

    Ouvrir sur GitHub →

  • 🟢 PR #985 — fix(frontend): close the tabindex clause in add-another's focusable selector

    Pull request (OPEN) · PR #985 fix(frontend): close the tabindex clause in add-another’s focusable selector · @rmdes

    Fixes #984.

    One character: the missing ).

    This is one of the last six changes ported from my fork; nothing here needs to hold a release.

    Ouvrir sur GitHub →

  • 🐛 Issue #984 — add-another's focusable selector is missing a closing bracket

    Issue ouverte · Issue #984 add-another’s focusable selector is missing a closing bracket · @rmdes

    packages/frontend/components/add-another/index.js:3 ends with [tabindex]:not([tabindex="-1"] and no closing ). Browsers recover from the malformed last clause today, which is why nothing visibly breaks, but the selector as written is invalid and the tabindex clause is not reliably applied when focusing a newly added item.

    Ouvrir sur GitHub →

  • 🟢 PR #983 — fix(endpoint-micropub): trim, drop empty and fold duplicate categories

    Pull request (OPEN) · PR #983 fix(endpoint-micropub): trim, drop empty and fold duplicate categories · @rmdes

    Fixes #982.

    getCategoryProperty trims each value, drops empties, and folds case-insensitive duplicates onto the first spelling given; a category left empty is removed. No canonical casing against the publication’s own category list, which would be a separate decision.

    Three unit tests and one integration test, all seen failing first.

    This is one of the last six changes ported from my fork; nothing here needs to hold a release.

    Ouvrir sur GitHub →

  • 🐛 Issue #982 — Micropub stores categories as typed: whitespace, empty values and case duplicates become distinct categories

    Issue ouverte · Issue #982 Micropub stores categories as typed: whitespace, empty values and case duplicates become distinct categories · @rmdes

    normaliseProperties in packages/endpoint-micropub/lib/jf2.js normalises content (line 79) and location (line 83) but passes category through untouched.

    Reproduction: POST /micropub with h=entry&category=Cheese&category=+cheese+&category=, then q=source&url=…: category is ["Cheese", " cheese ", ""], three categories on the site for one.

    Ouvrir sur GitHub →

  • 🟢 PR #981 — feat(endpoint-share): offer syndication targets on the share form

    Pull request (OPEN) · PR #981 feat(endpoint-share): offer syndication targets on the share form · @rmdes

    Fixes #980.

    A checkbox per configured syndication target, built the way the post form builds them (a target whose info cannot be read is shown disabled with the reason). Chosen targets are sent to Micropub as separate mp-syndicate-to values, since URLSearchParams would join an array with commas, and stay checked when the form is re-rendered on error.

    Three integration tests: the checkboxes render, several targets reach the post as separate values, and a chosen target stays checked on a 422. README documents it.

    This is one of the last six changes ported from my fork; nothing here needs to hold a release.

    Ouvrir sur GitHub →

  • 🐛 Issue #980 — Share form offers no way to choose syndication targets

    Issue ouverte · Issue #980 Share form offers no way to choose syndication targets · @rmdes

    The share form (packages/endpoint-share/views/share.njk) has no mp-syndicate-to field, and share.js:46 posts the form to Micropub as-is, so a post made from the share page or bookmarklet is never syndicated. The post form offers a checkbox per target (packages/endpoint-posts/views/post-form.njk:21).

    Reproduction: configure a syndicator, open /share, publish: no syndication target is offered and the post is created without mp-syndicate-to.

    Ouvrir sur GitHub →

  • 📝 51fe276 — docs: list the Microsub features Indiekit supports

    Commit sur main · 51fe276 · @rmdes

    docs: list the Microsub features Indiekit supports

    Ouvrir sur GitHub →

  • 💬 @paulrobertlloyd — PR #944 : feat(endpoint-microsub): PR 1 - Core Microsub server with channels and timeline

    Commentaire de pull request · PR #944 feat(endpoint-microsub): PR 1 - Core Microsub server with channels and timeline · @paulrobertlloyd

    Thanks for much for (the first part of) this contribution @rmdes – we got there eventually! I’ll release this in Beta 30, with the following PRs to be included in future beta releases. 🚀

    Ouvrir sur GitHub →

  • 📝 b6a74a5 — feat(endpoint-microsub): add core Microsub server with channels and t…

    Commit sur main · b6a74a5 · @rmdes

    …imeline * feat(endpoint-microsub): add core Microsub server with channels and timeline This PR adds the foundational Microsub endpoint with: Microsub API: - GET/POST ?action=channels - list, create, update, delete, reorder channels - GET/POST ?action=timeline - list items, mark read/unread, remove Storage: - MongoDB collections for channels and items - Cursor-based pagination for timeline - Per-user channel ordering and read state tracking Features: - Follows Microsub spec for channel and timeline actions - Testable with existing Microsub clients (Monocle, Indigenous, etc.) - Multi-user support via userId from session/token This is PR 1 of 6 for the Microsub implementation. Future PRs will add: - PR 2: Feed discovery and subscription - PR 3: Feed fetching and parsing - PR 4: Reader UI - PR 5: Compose and Micropub integration - PR 6: Settings and filtering Co-Authored-By: Claude Opus 4.5 noreply@anthropic.com * ci: add microsub endpoint to development config * feat(endpoint-microsub): add plug-in icon * fix(endpoint-microsub): use same mongodb version as indiekit The plug-in declared mongodb ^6.0.0 while indiekit declares ^7.4.0, so npm installed a nested copy of the driver. ObjectId values created by the plug-in came from bson 6 but were passed to collections served by bson 7, which threw BSONVersionError in markItemsRead, markItemsUnread and removeItems. * style(endpoint-microsub): fix eslint errors Fixes unicorn/prefer-await, unicorn/prefer-number-coercion, unicorn/consistent-boolean-name, unicorn/no-computed-property-existence-check and jsdoc/reject-function-type, and removes unused eslint-disable directives. Satisfying unicorn/prefer-await means init() now awaits index creation rather than leaving it to run in the background, so plug-in initialisation waits for indexes to be created. Errors are still caught and warned about, and the plug-in loader already awaits init(). * test(endpoint-microsub): add unit and integration tests Unit tests cover lib/utils and lib/storage, mirroring the structure of lib/. Controllers are covered by integration tests, as in other endpoint plug-ins. * refactor(endpoint-microsub): use getObjectId from @indiekit/util Replaces the direct mongodb import with @indiekit/util’s getObjectId, as suggested in review. The plug-in no longer declares mongodb at all, so its driver version can’t drift from the host’s — @indiekit/util owns that pin. This supersedes the earlier version bump, which fixed the same mismatch by matching the pin by hand and would have needed maintaining. * chore: update lockfile for endpoint-microsub dependency change Co-Authored-By: Claude Opus 5 noreply@anthropic.com Claude-Session: https://claude.ai/code/session_01WGHR7MuyvBaDbAFfAGUxeT * refactor(endpoint-microsub): use utility methods for uid and logging generateChannelUid built its own string from Math.random(). randomString from @indiekit/util does the same job with randomBytes, which is what a channel identifier should be using. That changes the alphabet from [a-z0-9] to base64url, so the tests asserting lowercase now assert URL-safe characters instead — that was the actual requirement, since a uid appears in Microsub request URLs. Replaces the one console.info in the package with debug, matching endpoint-micropub and endpoint-media, and declares the dependency. Co-Authored-By: Claude Opus 5 noreply@anthropic.com Claude-Session: https://claude.ai/code/session_01WGHR7MuyvBaDbAFfAGUxeT * test(endpoint-microsub): drop the constant parameter eslint rejects * chore(endpoint-microsub): satisfy strictNullChecks and the new lint rules * refactor(endpoint-microsub): use mongodb’s ObjectId now that util no longer exports getObjectId * feat(endpoint-microsub): page the timeline with the shared cursor Timeline items get an id, a UUIDv7 stamped with their publication date, listed and paged through util’s getCursor like posts and media are since #975. The cursor gains two options for it: a filter every page is confined to (the channel) and the key path to order on. Clients see that id as the Microsub _id and can mark or remove items by it; the Mongo _id no longer leaves the storage layer. The endpoint’s own cursor encoding and query builders go. * refactor(endpoint-microsub): reference channels by uid, not by Mongo id Items point at their channel by the channel’s uid, the string clients already use, so nothing in the package needs an ObjectId any more: no casting, no mongodb dependency, and indexes on strings only, in line with paginating and indexing on properties.uid elsewhere. * refactor(endpoint-microsub): address review - Errors use the shared localisable strings (BadRequestError.missingParameter, invalidValue, missingProperty) through the localiser the validators now take; channel not found and the name limit are package-scoped locale keys, and the unused title keys are gone. - uuidv7At moves to @indiekit/util, shared by the uid backfill and the Microsub timeline; the channel uid wrapper is a direct randomString(24). - One collections module replaces the two duplicated collection getters. - The user is publication.me: a session carries only a token and a scope, so the fallback chain never found anything else. * refactor(endpoint-microsub): type the localiser, drop the uid retry, name the channel variables * chore(endpoint-microsub): no init logging, README and docs page, engines like its siblings Other endpoints announce nothing at init and core already logs each collection it adds under debug, so the console lines go; index creation throws like core’s does rather than warn and carry on. --------- Co-authored-by: Claude Opus 4.5 noreply@anthropic.com Co-authored-by: Paul Robert Lloyd me+git@paulrobertlloyd.com

    Ouvrir sur GitHub →

  • 📝 f07b2d5 — docs(post-type-page): add contributors to package.json

    Commit sur main · f07b2d5 · @paulrobertlloyd

    docs(post-type-page): add contributors to package.json

    Ouvrir sur GitHub →

  • 📝 f10925c — docs(post-type-photo): remove mis-attributed contributors from packag…

    Commit sur main · f10925c · @paulrobertlloyd

    …e.json

    Ouvrir sur GitHub →

  • 💬 @paulrobertlloyd — issue #831 : Forgejo first, gitea next

    Commentaire d’issue · Issue #831 Forgejo first, gitea next · @paulrobertlloyd

    Updated the label in the website’s sidebar navigation to ‘Gitea (Forgejo)’ (ad360c4) to make it clearer that this plugin supports Forgejo-based forks of Gitea. Beyond that, I’m not sure it’s worth renaming and deprecating the npm package for this particular plug-in.

    Ouvrir sur GitHub →

  • 📝 ad360c4 — docs: add Forgejo to Gitea plugin label in sidebar navigation

    Commit sur main · ad360c4 · @paulrobertlloyd

    docs: add Forgejo to Gitea plugin label in sidebar navigation

    Ouvrir sur GitHub →

  • 💬 @paulrobertlloyd — issue #979 : Add index property to `addCollection` method

    Commentaire d’issue · Issue #979 Add index property to addCollection method · @paulrobertlloyd

    I like it! Let’s do a PR for this once #944 is merged 😄

    Ouvrir sur GitHub →

Older posts