iniquity

A re-imagining of the iconic BBS software.

View on GitHub

Iniquity

This is the re-imagining of the iconic Iniquity Bulletin Board Software.

Alt text

Release Quality Gate Status lerna Discord GitHub license

Synopsis

npm install -g @iniquitybbs/iniquity

You will find a iniquity and iq command in your path. Both commands do the same thing. Use whichever you prefer.

iq --version

Initialize the current directory as an Iniquity BBS.

iq init

Once the current directory has been initialized you quickly start the BBS with the start command.

iq server start

While you are developing, you can use the --watch flag to automatically restart the server when you make changes.

iq server --watch

Connect with SyncTERM or any telnet client to localhost on port 23 (default).

Getting started guide

You build your BBS with the bbs and screen API from @iniquitybbs/core. Here’s a minimal example:

import { bbs, screen } from "@iniquitybbs/core"

screen.setResolution(80, 25)

bbs.menu("main", {
    prompt: "Command: ",
    layout: "single",
    items: [
        { key: "M", label: "Messages", action: () => bbs.popup("Messages", "Coming soon!") },
        { key: "F", label: "Files", action: () => bbs.popup("Files", "Coming soon!") },
        { key: "Q", label: "Quit", action: "quit" }
    ]
})

bbs.start(async () => {
    bbs.say("Welcome to my BBS!")
    await bbs.pause()
    await bbs.showMenu("main")
})

Add a welcome screen and menu artwork:

import { bbs, screen } from "@iniquitybbs/core"

screen.setResolution(132, 37)

bbs.menu("main", {
    art: "main_menu.ans",
    layout: "two-column",
    items: [
        { key: "M", label: "Message bases", goto: "messages" },
        { key: "F", label: "File areas", goto: "files" },
        { key: "G", label: "Goodbye", action: "quit" }
    ]
})

bbs.start(async () => {
    await bbs.art("welcome.ans", { clearScreen: true, pauseAfter: true })
    await bbs.showMenu("main")
})

Learn more in the documentation.

Iniquity 3

Iniquity 3 is the modern reimagining of the Iniquity BBS software. It strives to embody many of the ideas of that era — a classic BBS experience with a clean Node.js and TypeScript stack for sysops, modders, and developers.

The journey

As of today, Iniquity 3 is a thoughtful fusion of Iniquity, Synchronet, EniGMA, x84, and other BBS softwares that have inspired the project along the way. You get a Node.js and TypeScript runtime: install, write your BBS in TypeScript, and run it with Node.

Development environment

Guiding principles

  1. Flexibility for sysops — Easy to develop and deploy BBS applications.
  2. Empowerment for developers and modders — A solid framework for custom terminal apps, not only legacy BBS setups.
  3. Interoperability — Networking, messages, and communication between BBS applications.
  4. Unified experience — Consistent behavior across terminals (e.g. SyncTERM, xterm, EtherTerm).

About the runtime

Iniquity 3 runs on Node.js and TypeScript only. Your BBS is a TypeScript program that uses @iniquitybbs/core (menus, artwork, users, MCI) and is executed by @iniquitybbs/iniquity (CLI and telnet server).

Developer focus

Iniquity 3 is both a BBS platform and an SDK for terminal applications. You can target:

Templates

The @iniquitybbs/templates package includes full example BBSs: Euphoria (modern layout, event bus, data-driven artwork) and Eternity (classic Iniquity-style flow, CP437/UTF-8 encoding choice). Use them as a starting point or reference.

Why TypeScript?

Iniquity 3 is written in TypeScript so you get:

Install from npm, run iq init and iq server start, and build your BBS in TypeScript.


Whether you’re a sysop modernizing a BBS or a developer building a terminal application, Iniquity 3 is built to help. Join the community and start building.

Development (from source)

Clone the repository and install dependencies (this bootstraps and builds all packages):

git clone https://github.com/iniquitybbs/iniquity.git
cd iniquity
npm install

Build all packages (if needed):

npm run build

To run the BBS server from source, see packages/iniquity/README.md. In short: from a directory that has been initialized with iq init (or using a template path), run the iniquity package’s server. Alternatively, install the CLI globally and use it from any directory:

npm install -g @iniquitybbs/iniquity
iq init
iq server start

Connect with SyncTERM or iq term to localhost:23.

Discord

Join us on Discord.

Issues

Share your ideas, feedback and bug reports.

Documentation

Read the Iniquity documentation.