Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 5 additions & 0 deletions .github/workflows/flutter-analyze.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ jobs:
- name: Analyze project source
run: flutter analyze --no-pub

# Unit tests only: the integration tests (tag `integration`) need a
# running Supabase stack, see tool/test_integration.sh.
- name: Run unit tests
run: flutter test --no-pub --exclude-tags integration

- name: Install pana
run: dart pub global activate pana

Expand Down
9 changes: 8 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -119,4 +119,11 @@ app.*.symbols
!**/ios/**/Podfile.lock

# Test scripts files
test-scripts
test-scripts

# Supabase CLI machine-local state (created by `supabase link`/`supabase
# start`, e.g. via example/utils/supabase_prepare.*). The rest of supabase/
# (config.toml for the local test stack, tests, Edge Functions) is tracked.
/supabase/.temp/
/supabase/.branches/
/supabase/.env*
149 changes: 149 additions & 0 deletions .pubignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
# Miscellaneous
*.class
*.lock
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/

# IntelliJ related
*.iml
*.ipr
*.iws
.idea/

# Visual Studio Code related
.classpath
.project
.settings/
.vscode/

# Flutter repo-specific
/bin/cache/
/bin/internal/bootstrap.bat
/bin/internal/bootstrap.sh
/bin/mingit/
/dev/benchmarks/mega_gallery/
/dev/bots/.recipe_deps
/dev/bots/android_tools/
/dev/devicelab/ABresults*.json
/dev/docs/doc/
/dev/docs/flutter.docs.zip
/dev/docs/lib/
/dev/docs/pubspec.yaml
/dev/integration_tests/**/xcuserdata
/dev/integration_tests/**/Pods
/packages/flutter/coverage/
version
analysis_benchmark.json

# packages file containing multi-root paths
.packages.generated

# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
**/generated_plugin_registrant.dart
.packages
.pub-cache/
.pub/
build/
flutter_*.png
linked_*.ds
unlinked.ds
unlinked_spec.ds

# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
**/android/key.properties
*.jks

# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/.last_build_id
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/ephemeral
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*

# macOS
**/macos/Flutter/GeneratedPluginRegistrant.swift

# Coverage
coverage/

# Symbols
app.*.symbols

# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
!/dev/ci/**/Gemfile.lock
!**/ios/**/Podfile.lock

# Test scripts files
test-scripts

# Supabase CLI machine-local state (created by `supabase link`/`supabase
# start`, e.g. via example/utils/supabase_prepare.*). The rest of supabase/
# (config.toml for the local test stack, tests, Edge Functions) is tracked.
/supabase/.temp/
/supabase/.branches/
/supabase/.env*
# ---------------------------------------------------------------------------
# pub only: a .pubignore replaces .gitignore for `dart pub publish`, so the
# rules above are repeated. Below, what the repository needs but the package
# doesn't (the documentation site, local tooling).
# ---------------------------------------------------------------------------
CNAME
/tool/
/supabase/config.toml
/supabase/migrations/
/supabase/tests/
# The Docusaurus site, except the screenshot pub.dev shows.
/doc/*
!/doc/static/
/doc/static/*
!/doc/static/img/
/doc/static/img/*
!/doc/static/img/example_light.jpg
!/doc/static/img/demo.gif
!/doc/static/img/insideapp-logo-dark-text.png
!/doc/static/img/insideapp-logo-light-text.png
66 changes: 66 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,69 @@
## [2.0.0-rc.1] - 2026-10-21
#### [@rickypid](https://github.com/rickypid)

Release candidate of 2.0.0: the API and the database schema are complete, feedback welcome before the stable release.

⚠️⚠️ **Breaking change: Dart API and database schema, see [MIGRATION.md](MIGRATION.md)** ⚠️⚠️

Moves the package to `flutter_chat_core`/`flutter_chat_ui` 2.x and redesigns
the database. The same SQL scripts create a fresh database or migrate a 1.x
one (maintenance window required).

### Breaking changes

* `ChatRoom`, `ChatUser` and `flutter_chat_core`'s `Message` replace the
`flutter_chat_types` models; dates are `DateTime`, ids are uuid strings.
* `SupabaseChatController` implements `flutter_chat_core`'s `ChatController`;
`roomsUpdates()`/`updateRoomList` become `roomsChanges()`/`applyRoomChange`.
* `SupabaseChatCoreConfig` takes named parameters;
`realtimeChatTypingUserPrefixChannel` becomes `realtimeRoomChannelPrefix`.
* Members are managed with `addMembers`/`removeMember`/`leaveRoom`/
`setMemberRole` instead of `updateRoom`; `fetchUser` and
`processRoomRow(s)` are removed.
* Errors are thrown as `SupabaseChatCoreException` subtypes.
* Database: uuid ids, `timestamptz` dates, `chats.room_members`, messages
partitioned by week (`pg_partman` + `pg_cron`), rooms created through the
`chats.create_room` RPC, message changes over private Realtime Broadcast
channels (self-hosted Realtime >= v2.33).

### Added

* `SupabaseChatRoomsController`: paginated, searchable rooms list kept in
sync over Realtime, with unread counters.
* Telegram-like features: read receipts and unread counts, replies,
reactions, editing, pinned messages, message search, pinned and muted
rooms, group roles, optimistic sending with retry.
* Scoping hooks on `SupabaseChatCoreConfig` to keep the chats of different
workspaces apart.
* Injectable client (`SupabaseChatCore(client:, config:)`) and `dispose()`.
* `cleanup-media` Edge Function to delete the files of deleted messages.
* `migrate_storage_uuids.sh`/`.ps1`: moves the 1.x attachments to the new
room folders.
* Redesigned Telegram-like example app, with voice messages on every
platform.

### Fixed

* #38: the typing indicator hit the Realtime Presence rate limit; it now uses
Broadcast.
* Web: the online status observer never removed its focus/blur listeners.
* Realtime channels leaked by the online status helpers.

### Security

* Stricter RLS: no self-granted membership, messages sent only as yourself,
edits by the author, group management by admins only.
* Private room channels authorized by policies on `realtime.messages`.
* Policies limited to `authenticated`, internal tables and trigger functions
closed to clients (clean Supabase advisors).

### Dependencies

* `flutter_chat_types` replaced by `flutter_chat_core: ^2.9.0`.
* `supabase_flutter: ^2.17.2`; Dart `>=3.8.0`, Flutter `>=3.32.0`.
* The example pins `flutter_chat_ui: '>=2.11.1 <2.12.0'` (2.12.0 crashes
inside a standard `Scaffold`).

## [1.6.2] - 2026-03-31
#### [@rickypid](https://github.com/rickypid)

Expand Down
Loading
Loading