v0.2.0
Highlights
This release contains breaking changes affecting communication between clients (Desktop & Web) and the Server. All self-hosted users must upgrade their server to the latest version to continue using Colanode. Data on your server will remain unaffected. Desktop app users will be prompted to log in again. See the migration guide below for more details.
Local-first Web Version
We have introduced the Web version of Colanode, a local-first and offline-ready client built with architecture similar to our desktop app. It leverages browser-based technologies such as OPFS (Origin Private File System) and SQLite-wasm to store data locally, synchronizing with the server when connected. Like the desktop app, the web client supports multiple accounts and connections to different servers. Due to browser constraints, main operations are handled within worker threads, mirroring Electron’s main process. Most desktop app implementations have been reused, with only a few custom abstractions added specifically for file system interactions and SQLite communication via Kysely.
File Handling via the API
We have deprecated S3 pre-signed URLs for file uploads and downloads. All file operations now occur through the server API, addressing several issues:
- CORS Challenges: Using the server API simplifies configuration by reducing CORS setup to a single configuration point.
- Compatibility Issues: Providers like Cloudflare R2 encountered authorization problems with pre-signed URLs using recent AWS S3 libraries.
- Enhanced Flexibility: Abstracting file handling via the API simplifies future integrations with alternative storage providers such as Azure or Google Cloud Platform.
Additionally, avatar and file storage have been consolidated into one configuration, simplifying setup and reducing redundancy.
API and Socket Changes
We have made significant updates to client-server communication protocols (both API and WebSockets) to resolve discrepancies between web and desktop (Node.js) environments. These updates also include general improvements and cleanups from previous implementations.
Connecting to Insecure Servers
The process for adding custom servers has been enhanced. Previously, users could not connect via insecure (HTTP) protocols unless using 'localhost'. Now, self-hosted server configurations are easier, simply copy the configuration link from your server’s root page into the client to establish a connection, regardless of the protocol or hostname.
Custom Path Prefix
You can now specify a custom path prefix if you're self-hosting Colanode behind an API gateway. Set the environment variable SERVER_PATH_PREFIX
to automatically apply this prefix to all URLs.
# Optional custom path prefix for the server.
# Specify as plain text without slashes. Example:
# 'colanode' changes 'https://localhost:3000/config' to 'https://localhost:3000/colanode/config'
# SERVER_PATH_PREFIX: 'colanode'
Framework and Library Upgrades
We have upgraded key dependencies to enhance performance and developer productivity:
- React: Version 19
- Tailwind CSS: Version 4
- Zod: Version 4
Both web and desktop clients utilize the same UI components.
Migration Guide
Remove all avatar storage configurations as these are no longer used:
# Delete these configurations:
S3_AVATARS_ENDPOINT: 'http://minio:9000'
S3_AVATARS_ACCESS_KEY: 'minioadmin'
S3_AVATARS_SECRET_KEY: 'your_minio_password'
S3_AVATARS_BUCKET_NAME: 'colanode-avatars'
S3_AVATARS_REGION: 'us-east-1'
Update the file storage configuration variable names:
# Before:
S3_FILES_ENDPOINT: 'http://minio:9000'
S3_FILES_ACCESS_KEY: 'minioadmin'
S3_FILES_SECRET_KEY: 'your_minio_password'
S3_FILES_BUCKET_NAME: 'colanode'
S3_FILES_REGION: 'us-east-1'
# After:
STORAGE_S3_ENDPOINT: 'http://minio:9000'
STORAGE_S3_ACCESS_KEY: 'minioadmin'
STORAGE_S3_SECRET_KEY: 'your_minio_password'
STORAGE_S3_BUCKET: 'colanode'
STORAGE_S3_REGION: 'us-east-1'
If you previously used separate buckets for avatars and files, ensure you migrate avatar files into your main files bucket, maintaining their original paths.
If you plan to use the web app, ensure your CORS configuration includes the relevant origin:
# Optional CORS Configuration. Default origin is 'https://app.colanode.com'.
# Specify multiple origins using commas or '*' to allow all origins.
# SERVER_CORS_ORIGIN: 'https://app.colanode.com'
# SERVER_CORS_MAX_AGE: '7200'
What's Changed
- Prepare for Simple Icons 15 by @LitoMore in #44
- Web version by @hakanshehu in #43
- Docker and workflow improvements by @hakanshehu in #46
- Update mutation naming convention by @hakanshehu in #47
- Allow users to delete custom servers by @hakanshehu in #48
- Prepare for release 0.2.0 by @hakanshehu in #49
- Minor fixes for server config url generation and file preview by @hakanshehu in #50
- Fix windows version update workflow step by @hakanshehu in #51
- Fix server isOutdated update by @hakanshehu in #52
- Fix desktop build issues by @hakanshehu in #53
New Contributors
Full Changelog: v0.1.6...v0.2.0