Each gallery can keep the cropped tile or show every image whole inside an even tile. Fit width stays the previous look. The choice is saved with that gallery and survives reopening and Markdown edits. Sharing, HTML export, and print follow it. Older galleries stay on fit width.
Select a standalone image to align it left, center, or right. The choice stays with that image through save, Markdown edits, and reload. Existing images keep their previous layout until an alignment is chosen. Galleries keep their own layout. Native editors apply a saved alignment and do not add a picker in this change.
Add a title Z-A option beside title A-Z on web, Android, iOS, the API, and the desktop sidecar. Pinned notes stay first, and same-title tie breaks stay as they were.
Repair untouched welcome notes with real line breaks, a consistent content hash and revision, and sync notification. Keep first-sign-in localization compatible with both seed versions and cover persisted database upgrades and user-content preservation.
Fixes#622
Docker instances reported most deployment fields as unknown. Report how
and when the container image was built, separately from how the
instance was deployed:
- Dockerfile: optional EDGE_EVER_BUILD_CREATED_AT, EDGE_EVER_BUILD_TRIGGER
and EDGE_EVER_BUILD_METHOD build args, empty by default.
- /api/health (self-hosted-bun only): optional buildCreatedAt and
buildProvenance. deploymentVersionCreatedAt and deployment keep their
meaning and stay runtime-supplied; Cloudflare responses are unchanged.
- docker-image.yml: official images record the build time and their
provenance. Draft-release builds dispatched with release_tag are
github_release, main pushes main_push, other dispatches manual.
The container test checks the health response for a metadata build
with runtime overrides and for a default self-build; the post-publish
audit checks the published image.
- Add an explicit `docker` deployment method. It is never inferred from
the runtime, and the registry source still comes only from
EDGE_EVER_CONTAINER_IMAGE.
- Web/desktop show "Image built at" and "Image build source" for Docker;
Android shows "Image built at". Older clients ignore the new fields.
- Document the build args and runtime variables in both Docker guides.
Co-authored-by: tianma-if <yingwaizhiying@gmail.com>
Public share and form pages only added a robots meta tag from JavaScript,
so the HTML for /share/* and /form/* was served without any indexing or
caching directive, and the form page had none at all. Error responses
from /api/public/* also lacked X-Robots-Tag.
Send one policy everywhere a token-bearing link is served:
X-Robots-Tag: noindex, nofollow, noarchive, nosnippet, noimageindex
Cache-Control: private, no-store
Referrer-Policy: no-referrer
- /api/public/*: shared middleware in the application, so it applies on
Cloudflare and Docker, including 404/403 responses. Routes that already
set Cache-Control keep it.
- /share/* and /form/* HTML: _headers rules for Cloudflare static assets
and the self-hosted static server.
- Referrer-Policy keeps the share token out of Referer headers sent to
linked sites.
robots.txt is deliberately not used to block these paths: a disallowed
URL can still be indexed from external links, because crawlers never see
the noindex header.
Co-authored-by: tianma-if <yingwaizhiying@gmail.com>
* feat: add table context menu with copy and paste
* fix(web): preserve native input and test table context menu regressions
* fix: harden table context actions and desktop clipboard
Search raw Markdown in source mode with literal character matching, batched undoable replacement, and matching highlights. Preserve query whitespace and keep replacement focus stable. Route source editor search shortcuts through the workspace controller.
Validation: 141 editor tests and 2 Chrome end-to-end cases passed; web and mobile typechecks and the web build passed.
Refs #574
* feat(web): improve editor resizing and header visibility
Prioritize note titles, compact notebook and tag controls by available space, preserve Smart Tags, and show accessible tooltips. Share pane-width limits across layout and resizing.
Validation: web/mobile typechecks and web build pass; 3002 bulk tests and 17 integration tests pass. One OpenClaw ACP timeout also reproduces on unchanged upstream/main 3855efb3. This commit builds on the existing notebook-pane resizing contribution 17f0898a.
* fix(web): handle constrained editor resizing
Video notes keep a hidden marker, and the note list can queue subtitle extraction. The desktop app downloads the audio with yt-dlp and sends it to the selected OpenAI-compatible speech service.
Copy images in generic page and selection clips into note resources so clips can retain them when source URLs change. Keep remote URLs for images that cannot be copied.
Protect concurrent note edits, parse Markdown image syntax correctly, and bound image transfers by time and size. Add unit and Chromium browser coverage.
Refs #159
* feat(editor): add setting to turn off spellcheck underlines
Add a device-local "Underline spelling mistakes" switch to the editing
preferences. The rich-text editor and the mobile plain-text editor now
set spellcheck from this preference and update live when it changes.
Defaults to enabled, so existing behavior is unchanged.
Refs #468
* feat(i18n): add Polish as an in-app locale
Add Polish (pl) across clients, mirroring how Japanese was added:
- Shared: full pl catalog, locale matching for pl/pl-*, Polish memo
templates and factory AI prompts, mobile editor strings, and Polish as
an AI translation target and selection-translate chip.
- Web: "Polski" in the language picker; the catalog is lazy-loaded in its
own i18n-pl chunk and kept out of the PWA precache like ja.
- Android: pl locale option, mobile-only strings, web-clip labels.
Messages that only had an English branch now use English for every
non-Chinese locale, so Japanese no longer falls back to Chinese there.
- iOS: .polish UI language (pl-PL), pl argument for every t() call,
pl in CFBundleLocalizations and Localizable.xcstrings.
- Companion: accepts locale "pl" and detects Polish requests.
- Browser extension: _locales/pl messages.
- Marketing site: /pl/ pages, hreflang, sitemap, language switcher.
- Google Play listing copy for pl-PL (manual publish only).
* fix(ios): show the note editor in Polish and Japanese
The iOS editor received every interface language except English as
Chinese, so with Polish or Japanese selected its toolbar and image
gallery controls were labeled in Chinese. Pass Polish and Japanese
through to the embedded editor, label its toolbar and the shared image
gallery controls in both languages, and rebuild the checked-in
EditorBundle. The Android editor uses the same gallery labels.
Also translate the last iOS strings that had no Polish text: the
follow-system language label, note created/updated times and the
current-device marker.
Refs #473
* fix(companion): recognize Polish typed without diacritics
Requests in Latin letters without Polish diacritics were always treated
as English, so with a Polish interface "Napisz plan na jutro" got an
English reply. With a Polish interface, such text is now told apart by
common English and Polish words; when it is still unclear, the recent
conversation and then the interface language decide. Other interface
languages keep treating Latin text as English.
Refs #473
* chore(ios): regenerate the Xcode project for Polish
Run xcodegen so the shipped Info.plist lists Polish in
CFBundleLocalizations and the project knows the pl region. The
hand-written AiDirectStream.swift entries are replaced by the IDs
xcodegen generates. MARKETING_VERSION and CURRENT_PROJECT_VERSION stay
in the project file because the release script and Xcode Cloud update
them there.
Refs #473
* i18n(pl): translate the sidebar shortcut, desktop menus and video scope
Add Polish for features that reached main while this branch was open:
the show/hide sidebar shortcut label, the desktop application and
editing context menus, and the new "ai:generate" MCP scope. The desktop
menus switch to Polish for pl and pl-* locales; other locales are
unchanged.
Refs #473
Streaming unzip treated ZIP signatures inside stored .docx, .xlsx, and .pptx files as archive entries. Read each entry from the central directory so existing exports restore.
Text-note card menus can copy the note as rich text. The open note uses the editor, including unsaved changes; other notes copy saved content without switching the editor.
ParentNode.append is the Workers stream helper under the root typecheck, so the preview attaches DOM nodes with appendChild. The sync queue test restores navigator after forcing onLine, so a later headless TipTap test can still read userAgent.