Skip to content
Merged

v3 #219

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
062054f
first v3
cupcakearmy Jul 12, 2026
e0d2228
v3
cupcakearmy Sep 6, 2026
2f4ebb9
build: add vite-plus, typescript 7 and tsconfig strictest catalog deps
cupcakearmy Sep 6, 2026
6a4d40e
refactor(cli): build with vite-plus instead of tsup
cupcakearmy Sep 6, 2026
849ab7e
chore: upgrade to typescript 7 with tsconfig strictest
cupcakearmy Sep 6, 2026
dd213d6
chore(web): remove lokalise tooling and scripts
cupcakearmy Sep 6, 2026
c78845c
docs: add vite-plus tooling todo
cupcakearmy Sep 6, 2026
4f5f829
test: add shared api client tests and remove dead backend code
cupcakearmy Sep 6, 2026
e81dde6
chore: remove all lokalise references and badge
cupcakearmy Sep 6, 2026
3ff1f82
ci: add rust+shared tests, cli-only build, bump action versions
cupcakearmy Sep 6, 2026
be61738
fix(ci): drop test:dl-browsers from test:prepare (root-only script br…
cupcakearmy Sep 6, 2026
77b7ae1
fix(ci): point CLI tests to cli.mjs output and drop removed buildx in…
cupcakearmy Sep 6, 2026
8871a6b
refactor: extract payload pack/unpack pipeline into @cryptgeon/shared
cupcakearmy Sep 12, 2026
82900ad
refactor: extract payload pack/unpack pipeline into @cryptgeon/shared
cupcakearmy Sep 12, 2026
2ded578
Merge branch 'v3' of github.com:cupcakearmy/cryptgeon into v3
cupcakearmy Sep 12, 2026
f36ae73
fix(web): pass FileDTO array directly to packContent (files already b…
cupcakearmy Sep 12, 2026
8162db4
docs: replace v3 plan with roadmap and drop stale plan file
cupcakearmy Sep 12, 2026
7a68422
docs: fold todo into roadmap and unify naming
cupcakearmy Sep 12, 2026
918640e
docs: expand changelog with missing releases and add v3 unreleased notes
cupcakearmy Sep 12, 2026
b073703
docs: correct v2.9.3 docker registry changelog entry
cupcakearmy Sep 12, 2026
b7c20d6
fix(web): drop stale base64 overhead from max size display
cupcakearmy Sep 12, 2026
74f387f
docs: align ES and zh readmes with v3 (cache, healthz, msgpack, env)
cupcakearmy Sep 12, 2026
b5c5629
chore: formatting
cupcakearmy Sep 12, 2026
c3c6e96
docs(examples): rename cache service in compose examples to match CAC…
cupcakearmy Sep 12, 2026
56f8498
docs: drop deprecated compose version tag
cupcakearmy Sep 12, 2026
8a3831f
chore: formatting
cupcakearmy Sep 12, 2026
ba76695
Delete Cryptgeon.postman_collection.json
cupcakearmy Sep 12, 2026
41d0f0b
chore: bump to 3.0.0-rc.0 and publish npm prereleases under rc tag
cupcakearmy Sep 12, 2026
a0bca0a
chore(cli): move all deps to devDependencies (bundled into single out…
cupcakearmy Sep 12, 2026
6de9703
ci: publish with --no-git-checks and drop done cli-deps todo
cupcakearmy Sep 12, 2026
3f7bb6f
chore: bump to 3.0.0-rc.1
cupcakearmy Sep 12, 2026
98c56f6
fix(cli): replace removed run-s in prepublishOnly
cupcakearmy Sep 12, 2026
2dc9d6a
chore: bump to 3.0.0-rc.2
cupcakearmy Sep 12, 2026
8df6b6c
docs: use v3 image tag instead of latest in compose
cupcakearmy Sep 12, 2026
f05707e
update deps
cupcakearmy Sep 12, 2026
7653409
chore: bump to 3.0.0-rc.3
cupcakearmy Sep 12, 2026
0d597ed
fix(web): re-add FileDTO import; run svelte-check in CI
cupcakearmy Sep 13, 2026
a57ead6
fix(web): snapshot files before worker transfer (Svelte proxy not clo…
cupcakearmy Sep 13, 2026
b58bf8a
feat: move calculation intensive part into a web worker
cupcakearmy Sep 13, 2026
d1126ac
fix(web): don't run file downloads as a $derived side effect
cupcakearmy Sep 19, 2026
055a48a
fix(web): stop transferring nested file buffers in worker unpack (com…
cupcakearmy Sep 19, 2026
5084ed5
docs: fix incorrect pg note wording in v3 changelog
cupcakearmy Sep 19, 2026
4dfed49
docs: correct frontend bullet in v3 changelog (was already SvelteKit)
cupcakearmy Sep 19, 2026
282fdb9
docs: add LLM usage disclosure to readmes
cupcakearmy Sep 19, 2026
7ef162b
chore: bump to 3.0.0-rc.4
cupcakearmy Sep 19, 2026
c99c62c
chore: clean up compose file
cupcakearmy Sep 21, 2026
b113d25
chore: bump to 3.0.0
cupcakearmy Sep 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file removed .github/lokalise.png
Binary file not shown.
21 changes: 12 additions & 9 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,32 +10,35 @@ jobs:
cli:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7

- uses: pnpm/action-setup@v6
- uses: actions/setup-node@v4
- uses: actions/setup-node@v7
with:
cache: 'pnpm'
node-version-file: '.nvmrc'
registry-url: 'https://registry.npmjs.org'

- run: |
pnpm install --frozen-lockfile
pnpm run build
pnpm install
pnpm --filter cryptgeon build

- run: npm publish
working-directory: ./packages/cli
- name: Publish to npm
run: |
DIST_TAG=latest
if [[ "${GITHUB_REF_NAME}" == *"-"* ]]; then
DIST_TAG=rc
fi
pnpm publish --filter cryptgeon --tag "${DIST_TAG}" --no-git-checks
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7
- uses: docker/setup-qemu-action@v4
- uses: docker/setup-buildx-action@v4
with:
install: true
- name: Docker Labels
id: meta
uses: docker/metadata-action@v6
Expand Down
18 changes: 12 additions & 6 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,31 +10,37 @@ jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7

# Node
- uses: pnpm/action-setup@v6
- uses: actions/setup-node@v4
- uses: actions/setup-node@v7
with:
cache: 'pnpm'
node-version-file: '.nvmrc'

# Docker
- uses: docker/setup-qemu-action@v4
- uses: docker/setup-buildx-action@v4
with:
install: true

- name: Prepare
run: |
pnpm install
pnpm exec playwright install --with-deps
pnpm run test:prepare

- name: Rust tests
run: cargo test --manifest-path packages/backend/Cargo.toml

- name: Shared tests
run: pnpm --filter @cryptgeon/shared test

- name: Frontend type check
run: pnpm --filter @cryptgeon/web check

- name: Run your tests
run: pnpm test

- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v7
if: ${{ !cancelled() }}
with:
name: playwright-report
Expand Down
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v24
v26
196 changes: 196 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,207 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased] — v3 (major rewrite)

### Added

- New shared TypeScript package `@cryptgeon/shared` as single source of truth for crypto, content codec and API client (crypto + compression + payload + types).
- Shared payload codec: `packContent` / `unpackContent` (encode → LZ4 → XChaCha20-Poly1305 and reverse).
- Cache-backed note storage using hashes (valkey/redis) with atomic view counting.

### Changed

- Encryption from AES to **XChaCha20-Poly1305** (client-side); dropped `occulto`.
- All API bodies switched to **MessagePack**.
- Frontend uses `@cryptgeon/shared` for crypto + payload codec (replacing the previous local `cryptgeon/shared`); heavy pack/unpack runs in a web worker.
- CLI rebuilt with `vite-plus` (bundles all deps) and imports from `@cryptgeon/shared`.

### Breaking changes

- Endpoints moved to `/api/v3/notes/` and `/api/v3/status`; health check to `/healthz`.
- `meta.extra` holds client-opaque data (e.g. scrypt derivation params), size-limited (`EXTRA_SIZE_LIMIT`, default 512 bytes).
- Inner payload is msgpack: `{ type: "text", data }` or `{ type: "files", data: [{ name, mime, size, data }] }`.
- Env renames: `REDIS` → `CACHE`, `REDIS_PREFIX` → `CACHE_PREFIX`; new `EXTRA_SIZE_LIMIT`.
- Docker `redis` service → `cache`; healthcheck → `http://127.0.0.1:8000/healthz`; image stays `valkey/valkey:7-alpine` (swap for any RESP-compatible).
- Storage switched to cache hashes with atomic `HINCRBY` view counting; the per-note lock (`lock.rs`) is removed.
- Notes can have **both** `views` and `expiration` set simultaneously.
- v2 notes are **not migrated**: flush the cache before deploying v3; v2/v3 notes are not interoperable.

## [2.9.3] - 2026-06-25

### Added

- Basic file drag-and-drop support.

### Changed

- Publish the Docker image to GitHub Container Registry (ghcr).

### Fixed

- #207: keep audio/other file mime types intact.
- Localization key typo `note_to_big` → `note_too_big`.

## [2.9.2] - 2026-06-07

### Added

- Image paste support.
- Czech translation.
- `THEME_HOME_LINK` environment variable.
- Docker compose: prevent anonymous volume creation.

### Changed

- Replace Redis with Valkey in docker-compose files.
- Rust 2024 edition compat, watchexec and axum 0.8 updates.
- Switched license checker package.
- Frontend cleanup and readme/docs cleanup.

### Security

- Updated dependencies (ring, npm_and_yarn group).

## [2.9.1] - 2025-02-27

### Added

- Docs about running Redis in RAM-only mode.

### Fixed

- Password eye toggle not working.

### Security

- Updated dependencies.

## [2.9.0] - 2025-01-18

### Changed

- Frontend rework: migrate to Svelte 5.
- Update Redis documentation link in compose.

### Fixed

- Fix race condition on the delete endpoint by introducing locks to guarantee the view counter.

## [2.8.4] - 2025-01-02

### Added

- Chinese (zh-TW) translations.
- Basic auth example (nginx).

## [2.8.3] - 2024-09-27

### Added

- Options to add an imprint: `IMPRINT_URL`, `IMPRINT_HTML`.

## [2.8.2] - 2024-09-20

### Added

- Raycast extension links.

### Changed

- Add `type="button"` to form elements.
- Bump pnpm version.

## [2.8.1] - 2024-09-02

### Changed

- Move shared package into the CLI.
- Add a guide.

## [2.8.0] - 2024-08-27

### Changed

- Migrate backend from actix to axum (major refactor).
- More robust config, body limit via axum.
- Use container for test pipeline; skip size/expiration quirks in Safari.

### Fixed

- Typos in English localization.

## [2.7.0] - 2024-08-23

### Added

- Better programmatic access to the shared client.
- Redis TLS feature, dynamically-linked and native musl targets.
- French blog post and improved French translations.

### Changed

- Bump redis crate to 0.25.2.

## [2.6.1] - 2024-05-04

### Added

- Polish translation.

## [2.6.0] - 2024-03-24

### Added

- `ALLOW_FILES` flag.
- `NEW_NOTE_NOTICE` → `THEME_NEW_NOTE_NOTICE` theme flag.
- French translation update.

### Changed

- Reset form when clicking the logo after creating a note.

## [2.5.1] - 2024-03-04

### Changed

- Reset translation.
- German (`de`) translation update.

## [2.5.0] - 2024-03-04

### Added

- Expose internal shared functionality for external/programmatic usage.
- German translation updates.

### Security

- Updated dependencies (zerocopy).

## [2.4.0] - 2023-11-01

### Changed

- Removed HTML sanitation, display the original message as string
- Links are now displayed under the note in a separate section

## [2.3.3] - 2023-08-15

### Changed

- Maintenance.
- Updated dependencies.

## [2.3.2] - 2023-08-04

### Added

- Spanish readme (`README_ES.md`).

### Changed

- Translation and grammar fixes (en, de, de, es).

## [2.3.1] - 2023-06-23

### Added
Expand All @@ -30,6 +224,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- Moved to monorepo.

## [2.2.0] - 2023-01-14

### Changed

- Default port is now 8000, not 5000.
Expand Down
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
## Requirements

- [mise](https://mise.jdx.dev) — manages pnpm, rust, node (see `mise.toml`)
- docker or [colima](https://github.com/abiosoft/colima) (for redis)
- docker or [colima](https://github.com/abiosoft/colima) (for cache)

## Setup

Expand All @@ -18,7 +18,7 @@ pnpm install
pnpm run dev
```

Make sure docker/colima is running. This starts redis, the rust backend, the web client, and the CLI. The app is at [localhost:3000](http://localhost:3000).
Make sure docker/colima is running. This starts the cache (valkey/redis), the rust backend, the web client, and the CLI. The app is at [localhost:3000](http://localhost:3000).

## Tests

Expand Down
Loading
Loading