SchildiChat Android Next — a Matrix client based on Element X Android with Schildi-specific features (MSC2545 sticker & emoticon packs and more).
  • Kotlin 98.7%
  • Shell 0.6%
  • Python 0.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
skipper 7d9cb58138 Fix the 20 never-run unit tests surfaced by the merge and clean up their ktlint
The merge made these modules' test source sets compilable, so 20 tests that
never ran at fork HEAD now execute. All 20 are pre-existing upstream/fork
issues surfaced by the merge, not merge regressions. Test-only changes; no
production behaviour is affected.

unifiedpush UnifiedPushParserTest (4):
RoomId/EventId debug validation is disabled by the `&& false` guard in
RoomId.kt / EventId.kt, so parse() of a malformed id no longer throws.
Replaced assertThrowsInDebug with lenient non-null assertions on the raw
value the parser now returns (marked with a comment explaining the guard).

rageshake DefaultBugReporterTest (5):
- EXPECTED_NUMBER_OF_PROGRESS_VALUE 18 -> 36: the OkHttp write-listener
  callback count is request-body-size and environment dependent, and changed
  after upstream updates.
- truncation test: the crash call stack is capped at take(5000) before
  truncateDescription runs (far below MAX_DESCRIPTION_SIZE), so an over-long
  description must now come from problemDescription (which is not capped) to
  trigger the truncation marker.

rageshake BugReportPresenterTest (1):
"send failure description too short" needs a non-internal build
(minBugReportLength = 10) for "bug!" (4 chars) to be genuinely too short;
pass aBuildMeta(isDebuggable = false) via a new optional createPresenter param.

mediaupload AndroidMediaPreProcessorTest (10):
@Ignore with reason - the test assets (image.jpeg/png, animated_gif.gif,
image.svg, text.txt, sample3s.mp3) were never committed in any ref. Per
decision these are ignored rather than fabricating binary fixtures; report
upstream so the fixtures can be added.

ktlint cleanup (loose ends from prior merge-fix work):
- DefaultMediaSenderTest.kt: moved `// SC` markers off inline positions that
  trip ktlint (type-argument list, lambda arrows).
- BugReportPresenterTest.kt: fixed lexicographic import order.
All five touched files are now ktlint-clean.

Result: :libraries:pushproviders:unifiedpush:test, :features:rageshake:impl:test
and :libraries:mediaupload:impl:test -> BUILD SUCCESSFUL (161 tests, 0
failures; 19 skipped = 9 pre-existing + 10 new @Ignore).
2026-10-07 11:46:05 +02:00
.fastlane Add fastlane for gplay release publishing 2024-03-03 11:33:53 +01:00
.github Remove Roborazzi, use Paparazzi for Compound (#7735) 2026-09-21 12:27:56 +02:00
.idea fixed issues while building the app 2026-09-27 18:38:04 +02:00
.maestro Update Maestro tests 2026-09-24 17:12:17 +02:00
annotations Update ContributesNodeProcessor so that generated classes follow naming convention 2026-08-24 11:31:22 +02:00
app Test merge: upstream 26.09.4 into msc2545-stickers fork (scratch) 2026-10-07 11:45:55 +02:00
appconfig Merge tag 'v26.09.3' 2026-09-28 14:51:15 +02:00
appicon Copyright: Add Element Creations Ltd. copyright 2025-11-10 11:05:05 +01:00
appnav Merge tag 'v26.09.3' 2026-09-28 14:51:15 +02:00
changelog.d Polish the unified picker drawer: remember the last-used tab and add per-tab retry 2026-10-06 16:57:35 +02:00
codegen Update ContributesNodeProcessor so that generated classes follow naming convention 2026-08-24 11:31:22 +02:00
docs Merge tag 'v26.09.2' 2026-09-12 12:25:06 +02:00
enterprise@6b422f4c8e Update ref to main branch. 2026-09-15 09:15:38 +02:00
features Fix the 20 never-run unit tests surfaced by the merge and clean up their ktlint 2026-10-07 11:46:05 +02:00
gradle Test merge: upstream 26.09.4 into msc2545-stickers fork (scratch) 2026-10-07 11:45:55 +02:00
graphics Improve turtle center 2026-09-13 13:28:29 +02:00
libraries Fix the 20 never-run unit tests surfaced by the merge and clean up their ktlint 2026-10-07 11:46:05 +02:00
metadata/en-US Increment version to 0.11.7 2026-10-02 08:56:23 +02:00
plugins Merge tag 'v26.09.4' 2026-09-30 13:41:00 +02:00
sc_tools Bump native toolchains 2026-09-12 13:26:27 +02:00
schildi Fix poison-store and missing-param test failures across merged tree 2026-10-07 11:46:05 +02:00
screenshots Merge tag 'v26.09.3' 2026-09-28 14:51:15 +02:00
services Merge tag 'v26.08.4' 2026-08-30 17:18:03 +02:00
tests Revert "Fix unread notification count in room list (#7749)" 2026-09-29 16:31:01 +02:00
tools Setting version for the release 26.09.3 2026-09-25 16:10:17 +02:00
upstream_infra Merge tag 'v26.09.4' 2026-09-30 13:41:00 +02:00
.editorconfig Merge tag 'v26.01.1' 2026-01-24 09:32:25 +01:00
.gitignore Ignore all markdown files except AGENTS, CLAUDE, FEATURES and readme 2026-10-06 17:26:03 +02:00
.gitmodules Add git@github.com:element-hq/element-android-enterprise.git as a git module. 2024-06-26 11:58:42 +02:00
.lfsconfig Reapply "Use upstream LFS" 2024-08-24 16:58:40 +02:00
AGENTS.md Add instructions to let the CI record the screenshot if necessary. 2026-08-26 13:50:45 +02:00
build.gradle.kts Remove Roborazzi, use Paparazzi for Compound (#7735) 2026-09-21 12:27:56 +02:00
CLAUDE.md Create AGENTS.md 2026-03-25 12:19:26 +01:00
correct_strings.sh Merge tag 'v26.06.1' 2026-06-05 17:07:02 +02:00
create_variant_resources.sh Add msc2545 flavor with its own application id 2026-09-28 15:23:33 +02:00
fastlane Adding fastlane file for version 26.09.4 2026-09-29 16:37:05 +02:00
FEATURES.md Polish the unified picker drawer: remember the last-used tab and add per-tab retry 2026-10-06 16:57:35 +02:00
fix_merge.sh Add back some automatic strings corrections 2025-03-16 12:28:38 +01:00
gradle.properties Remove Roborazzi, use Paparazzi for Compound (#7735) 2026-09-21 12:27:56 +02:00
gradlew Update Gradle Wrapper from 9.5.1 to 9.6.1 2026-07-17 13:59:33 +00:00
gradlew.bat Update Gradle Wrapper from 9.5.1 to 9.6.1 2026-07-17 13:59:33 +00:00
increment_version.sh increment_version.sh: Exclude sdk-only changes from changelog 2026-03-28 08:37:29 +01:00
LICENSE Copy licence from https://www.gnu.org/licenses/agpl-3.0.txt 2024-09-06 16:39:00 +02:00
LICENSE-COMMERCIAL New LICENSE-COMMERCIAL file 2025-01-07 09:59:50 +01:00
merge_helpers.sh Setup some release infra 2023-10-01 18:24:46 +02:00
pre_merge.sh Update SC version scheme to compensate for upstream calver 2025-02-05 19:24:23 +01:00
readme.md Test merge: upstream 26.09.4 into msc2545-stickers fork (scratch) 2026-10-07 11:45:55 +02:00
settings.gradle.kts Test merge: upstream 26.09.4 into msc2545-stickers fork (scratch) 2026-10-07 11:45:55 +02:00

Translation status SchildiChat-Android Matrix room #android:schildi.chat

SchildiChat Android Next — Enhanced Edition

This repository hosts an enhanced version of SchildiChat Android Next — a Matrix client based on Element Android X in the tradition of the original SchildiChat for Android which was based on the now deprecated Element Android codebase.

Note that this is not the regular SchildiChat Next: these builds are based on the upstream SchildiNext codebase but ship with extra features on top of it — most recently full support for sticker & emoticon image packs (MSC2545): send stickers from the composer, insert emoticons inline, and use emoticons as reactions — plus a timeline font size setting. An overview over all changes compared to Element X can be found here.

Similarly to Element X, this SchildiChat Android rewrite should still be considered beta, as it lacks some functionality which one might expect from a fully-featured chat app, compared to the old SchildiChat implementation.

Note for F-Droid: You can get faster updates directly from the developer by adding the SpiritCroc F-Droid repository. These builds usually match the releases in the official F-Droid repository thanks to reproducible builds, but get built directly on app update and do not need to go through a possibly lengthy build process on the F-Droid servers.

Beta builds for testing pre-release versions are available from the SpiritCroc testing F-Droid repository under a different package name, and can thus be installed next to the stable release.

Releases: Prebuilt phone APKs (arm64-v8a / armeabi-v7a / universal) are published on the Forgejo release page; this repository's default branch carries the current feature set, including the MSC2545 sticker & emoticon work.

Current state of development

Since Android support has landed in SchildiChat Revenge, Next is no longer my main focus for Android.
This means, for now Next will still receive updates (including upstream merges / Element X updates), but likely will not gain any significant new Schildi-specific features.

Translations

If you want to translate SchildiChat, visit our weblate.
Translations that concern upstream Element code are best contributed directly to Element, who currently manage translations on localazy.

Screenshots

Building

In general, building works the same as for Element X or any common Android project. Just import into Android Studio and make sure you have all the required SDKs ready.

WYSIWYG development

To develop changes in our matrix-rich-text-editor fork:

Build WYSIWYG locally

  • Clone the repo
  • Bump the version number to some future version that doesn't exist yet using ./update_version 1.2.3 where 1.2.3 is your chosen version number. By not re-using any existing version number you can make sure you're using your local build if the build of SchildiChat succeeds.
  • Publish the wysiwyg by running make android in its directory. (Make sure you have JAVA_HOME, ANDROID_NDK_HOME and all the build dependencies setup)

Include local-built WYSIWYG in SchildiChat

  • Modify settings.gradle.kts to insert mavenLocal() into the dependencyResolutionManagement {} block. (Cherry-pick)
  • Change the version number of wysiwyg in gradle/libs.versions.toml to match the one you published locally.

Contributing

Generally, contributions are welcome!
Note that in order to ease upstream merges, we want to leave the smallest footprint possible on Element's sources when implementing original features or patching Element's behaviour.

In particular (may change a bit while the project is still in alpha):

  • Put code into additional files (chat.schildi.* package names) if reasonable
    • Prefer schildi/lib module if it doesn't depend on element modules (except maybe strings)
    • Prefer schildi/components module if it depend on some of Element's Design/UI components but nothing else
    • Otherwise, prefer element module where it makes most sense (or create a new module for bigger features, maybe)
  • Put Schildi-specific drawables and other xml resources that override upstream resources into the sc build flavor
    • This way, we can use the same name and avoid merge conflicts
    • Compare e.g. libraries/designsystem: we define the flavor sc and thus put drawables in the sc instead of main directory. For new modules that do not feature a sc flavor yet, copy over the required build.gradle.kts content from a module that does.
  • Put Schildi-specific strings into schildi/lib
    • Never touch upstream strings! If we want to change Element's strings, we'll either want a script that patches them, so we can restore upstream strings before upstream merges and re-do our changes automatically after the merge, or alternative put it into an sc build flavor, if we do not need to touch multiple translations.
  • Don't worry too much about code style if violating it can ease upstream merges
    • When putting upstream code into a new block (e.g., putting it in an if-statement), don't indent the upstream code, but rather add comments like // Wrong indention for merge-ability - start and // Wrong indention for merge-ability - end