A simple & featureful multi-user Q&A software, written in Kotlin.
  • Kotlin 62.2%
  • Java 33.1%
  • CSS 4.3%
  • Dockerfile 0.4%
Find a file
2026-04-08 19:23:35 -05:00
.forgejo/workflows make worksflows run one at a time; clarify names 2026-03-27 19:47:49 -05:00
gradle Merge remote-tracking branch 'origin/main' into solonovamax-general/cleanup 2026-04-08 19:12:28 -04:00
src/main Add Dutch translation 2026-04-08 19:38:29 -04:00
.editorconfig add editorconfig 2026-03-26 10:29:28 -04:00
.gitignore optimize generated jte templates 2026-03-23 16:12:13 -04:00
.noai Add CONTRIBUTING.md 2026-03-07 14:47:08 -05:00
build.gradle.kts Use slf4k for logging 2026-03-29 20:55:27 -04:00
compose.example.yml Update compose example 2026-02-23 22:56:21 -05:00
CONFIGURATION.md Single user mode, notif/crosspost target config options 2026-03-27 12:26:17 -04:00
CONTRIBUTING.md Add kdoc to utils, refactor crossposting models 2026-03-26 10:39:16 -04:00
Dockerfile Use Bellsoft's Liberica image as runtime base 2026-04-08 19:23:35 -05:00
gradle.properties Add some gradle properties to improve performance 2026-03-22 19:36:27 -04:00
gradlew Update gradle to latest version 2026-03-22 18:34:12 -04:00
gradlew.bat Update gradle to latest version 2026-03-22 18:34:12 -04:00
LICENSE Add GPLv3 2026-02-27 20:46:10 -05:00
README.md Update README, use global client in avatar route 2026-03-26 13:46:13 -04:00
settings.gradle.kts Replace Svelte frontend 2026-02-22 11:59:25 -05:00

Ask.kt

Build Status Translation Status

A simple & featureful multi-user Q&A software, written in Kotlin.

Features

For Users

  • Asks can have content warnings or nicknames
  • Asks can be marked private so they never appear in the public inbox of a user
  • Inboxes can turn off receiving asks or showing them publicly
  • Inboxes can be subscribed to by RSS
  • Can display Fediverse and Bluesky accounts and a website
  • Automated crossposting to Mastodon, Bluesky, and Discord (by webhook)
    • Mastodon crossposting can have a content warning and visibility set
  • Push notifications with ntfy
  • Generate invites, if admins allow

For Admins

  • User suspension, deletion, and editing
  • Asker user/IP logging
  • Ask deletion
  • Site announcements
  • Multiple registration types
    • Open
    • Approval required
    • Invite only
    • Closed
  • Admin notifications for username changes, user registrations, and more
  • Custom CSS can be configured
  • Site title can be set along with a favicon
  • Dockerfile for easy deployment

Misc

  • Server side rendered frontend with a single JS function to copy text
  • Persistent queue to retry tasks that might fail (notifications or crossposting)
  • Supports multiple languages

Using

Ask.kt requires at least Java 21 and a PostgreSQL database.

Download the JAR file and run it with Java 21 or higher (java -jar ask-kt-version-all.jar). It will write a blank config, then quit. Edit the config, start again, and you're good to go!

You must use Ask.kt behind a reverse proxy, otherwise IPs will not be logged correctly.

Migrating from AskJS

This project is the successor to AskJS. The client is better, the tools are better, and it's overall safer.

Please note that the configuration is not the same. Ask.kt will generate a new default one for you, use that one.

To migrate, edit the config to point to a new database, then run the jar with the argument migrate jdbc:postgresql://OLD_HOST:OLD_PORT/OLD_DB?user=OLD_USER&password=OLD_PASSWORD and it will convert the old database to the new one.

Configuration

A detailed guide on the configuration can be found in CONFIGURATION.md.

Support

If you need help with Ask.kt, let me know! There's a list of contact methods on my website https://remlit.site/.