Skip to content


Repository files navigation

Hanas (ʜᴀʜ-nəs, -nahs /ˈhɑ.nəs/, /ˈhɑ.nɑs/; like Japanese 話す) is a conlanging tool and community, primarily inspired by the work of ConWorkShop. The backend is built using Express and Prisma. It is frontend-agnostic, but the official frontend is a webapp built using Vue 3.

Use & Connect

Hanas doesn't have an official instance (yet!). In the meantime, you can contribute code here, and discuss the project in our discord! (For the privacy enthusiasts: eventually an IRC might be set up or something? Sorry, Discord's easy to use.)


There's a lot of work to be done! If you:

  • know a non-English language: help translate! See packages/web/
  • know Typescript, Vue, HTML, or CSS: contribute code! See in this folder.

Note that contributions will also be placed under the same license as the rest of the project.


  1. Grep through the project for CHANGEME. There are a few places where the default configuration has default passwords and such, and these need to be changed.
  2. Double check what localhost really is for you. On WSL installs, you might need to grep host.docker.internal and change it to localhost, or vice versa - I haven't done enough hunting to figure out what's going on with that.

Using Docker (the easy way)

Run docker-compose up in the project root. Configure access with nginx if you should so desire.

Do it yourself (the hard way)

Hanas is made of a few different services:

  • the database
  • the backend
  • storage backend
  • Thumbor
  • the frontend (optional)
  • the announcements server (optional)
  • the events server (optional)
  • and Kratos.

The frontend is technically optional, but in practice you'll want to run a frontend of some sort. The announcements and events servers are entirely optional, but can provide a better experience for the frontend. The storage backend needs to be an S3-compatible one.


I prefer Postgres, and so things will probably work best with that; however, any database supported by Prisma other than Mongo should work. If you want to change the database type, change it in schema.prisma. See the Prisma documentation for how to do all that.

Once you have the database running, build a connection URL for it to supply to the backend.


Kratos is the authentication solution. It's not perfect yet, but it provides enough that reimplementing what it has would be a waste of time. In my experience, Kratos has been slightly hellish to set up. We provide a known working Kratos config for Hanas in the root of the repo under kratos-config.

Once you have Kratos set up, remember which host and ports it's running on. By default with our config, it's localhost:4433 and localhost:4434.


See the README in packages/api.


See the README in packages/web.

Announcements server

This is optional. It allows people with access to the running server to post announcements with a certain period of relevance - say, notify about community events, maintenance times, etc. See the README in packages/announcement-server.

Event server

This is also optional. It allows users to receive WebSocket notifications about language invitations, announcements from the announcement server, and optionally provide a sort of "activity feed" which details current work being done using the website. See the README in packages/event-server.


Somewhat out of the ordinary: the Non-Violent Public License. You can treat this as a fairly standard copyleft license, save for the ethical restrictions on usage. Given that this is a conlanging webapp, most of these can likely safely be ignored by anyone simply running or using Hanas, save for

ii. You do not use the Work for the purpose of Surveilling or tracking individuals for financial gain.


viii. You do not use the Work to either Discriminate or spread Hate Speech on the basis of sex, sexual orientation, gender identity, race, age, disability, color, national origin, religion, caste, or lower economic status.

I trust anyone running a Hanas instance should have no issues following either part of the license.