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
- know Typescript, Vue, HTML, or CSS: contribute code! See
HACKING.mdin this folder.
Note that contributions will also be placed under the same license as the rest of the project.
- 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.
- Double check what
localhostreally is for you. On WSL installs, you might need to grep
host.docker.internaland 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)
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
- 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
Once you have Kratos set up, remember which host and ports it's running on. By
default with our config, it's
See the README in
See the README in
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
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
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.