# firebird: a community TI-Nspire emulator in Qt and C++, with a manual step for iOS JIT builds

> Firebird is the community emulator for TI-Nspire calculators, created originally by Goplat and now covering Touchpad, CX and CX II units on Android, iOS, Linux, macOS and Windows. Building it means Qt5 and qmake, and the iOS translation build needs a file added by hand.

**nspire-emus/firebird** — Multi-platform emulator of TI Nspire calculators

- Repository: https://github.com/nspire-emus/firebird
- Stars: 853 · Forks: 116
- Language: C++
- License: GPL-3.0
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/nspire-emus-firebird

## A community project that inherited an existing emulator

Firebird is the community TI-Nspire emulator, and the README says it was originally created by Goplat. That lineage matters for judging it, because this is a maintained fork of a known codebase rather than a fresh implementation, and the differences between Firebird and the original are the parts the maintainers chose to work on.

The supported hardware is stated precisely: Nspire Touchpad with CAS, CX with CAS, and CX II in its -T and CAS variants, running on Android, iOS, Linux, macOS and Windows. The primary language is C++, and the topics list names Qt5 and QML alongside android, arm, ios and jit.

The download is a single point: the latest release page on GitHub. There is no package repository in the README, though the badge row shows that the project is built for the openSUSE build service by Vogtinator, so a distribution package does exist for at least one Linux distribution.

The project describes itself as currently the community TI-Nspire emulator, which is a statement of position as much as of function. For a reader deciding whether to install it, the relevant question is whether the model coverage matches the calculator on the desk, and that list above is the answer.

## Building means Qt5, qmake and three shell commands

The build requirements are short because the project is a classic qmake project rather than a CMake one. You install Qt5 first, then either open the project in Qt Creator and configure your kits and compilers, or build from a terminal.

The terminal route is three commands:

```bash
mkdir -p build
cd build
qmake ..
```

```bash
make
```

The build directory is created out of tree and qmake is pointed at the parent directory, so the generated makefiles land in build/ while the sources stay where they are. The single project file at the root of the repository is firebird.pro, and it is where the compile-time switches live, including the TRANSLATION_ENABLED setting mentioned in the iOS section.

Qt Creator is the alternative the README recommends first, with the note not to forget to configure your kits and compilers. That is the path for anyone building for iOS, since the iOS instructions assume a generated Xcode project.

The cross-compilation story is visible in the repository layout. There are android/ and emscripten/ directories, and a headless/ directory, which suggests the core is separable from the GUI and can be built for targets where a window system is not available, including a browser via Emscripten.

## The iOS JIT build needs a file added by hand

One platform has a documented workaround, and it involves a qmake bug rather than anything about the emulator. The README explains that there seems to be a bug in qmake that makes the required .S file get ignored when building a translation enabled binary, which is the JIT style build, and that TRANSLATION_ENABLED = true in firebird.pro turns it on.

The manual procedure runs through Xcode. You hit Build in Qt Creator on an iOS kit or target, which fails. You open the generated .xcodeproj file from the build folder in Xcode. You locate asmcode_arm.S in the file list, click it, and in the right sidebar add it to the Firebird target. You adjust the other project settings as you see fit, covering certificates, profiles, team, signings and entitlements, though the README notes those should be automatic apart from the Team choice. Then you build and run.

Two things are worth taking from this. The JIT is what makes the emulator fast enough to be usable on a phone, and the file it needs is hand-written assembly, asmcode_arm.S, which is why qmake dropping it from the target is fatal rather than merely inconvenient. And the build system itself is the weak point in this project, not the emulator.

## One core, several front ends, and a QML bridge

The file list at the root tells you how the code is arranged. There is a core/ directory holding the emulator itself, a headless/ directory for running without a user interface, and android/ and emscripten/ directories for the two targets that are not desktop applications.

The desktop front end is Qt widgets. mainwindow.cpp with mainwindow.ui is the main window, lcdwidget.cpp is the calculator screen, dockwidget.cpp is a dock widget, consolelineedit.cpp is a console line editor, kitmodel.cpp models the calculator kits, and usblinktreewidget.cpp handles the USB link. The emulator keyboard is qmlbridge.cpp and qtkeypadbridge.cpp, qml/ holds the QML side, and i18n/ holds translations, so the interface is localised.

Two more files are worth knowing about. emuthread.cpp is the emulator thread, which tells you the emulation runs on its own thread rather than on the GUI thread. And qtframebuffer.cpp is the framebuffer bridge, which is how the emulated screen reaches the display.

The .gitmodules file indicates that parts of the tree come from elsewhere, which is typical of a fork that has absorbed upstream components without rewriting them.

## GPLv3, with the KDE icons carved out

The licence section is short and has one wrinkle. The work is licensed under the GPLv3, except the icons from the KDE project, which are excluded. That is a normal arrangement when a project reuses artwork under a different licence, and it means the icon set carries its own terms rather than the GPLv3 ones. The LICENSE file at the root of the repository holds the actual text, and this is not legal advice.

The release history is the more consequential fact for anyone considering it. The tagged versions are v1.6 on 2023-03-16, v1.5 on 2020-03-28 and v1.4 on 2017-11-04, with v1.4 titled around a switchable UI. The last push to the repository was on 2026-06-25 and the repository is not archived, so work continues in the source tree, but the last published binary is more than three years old at the point of this review.

That gap has a practical consequence. The CI badges in the README cover Android, macOS and Windows builds, and the openSUSE build service badge shows a package build, so the project is still buildable and packaged. What is not current is the shipped release, and a user who wants the newest behaviour has to build from master, which is a different proposition from downloading a release.

## Where Firebird is the wrong tool

The first wrong fit is a calculator model outside the supported list. Touchpad, CX and CX II are named, and nothing else is. If your calculator is a different model, the README offers no basis for expecting it to work, and the project gives no indication that support is being extended to newer hardware.

The second is expecting a current binary. With v1.6 from 2023-03-16 as the newest release and the source moving on to 2026-06-25, the difference between what you download and what is in the tree is unknown in size. Anyone who needs a specific recent fix, especially on iOS where the manual assembly step is required, is building from source and accepting the toolchain cost.

The third is the emulator image question, and the README is silent on it. The project emulates the hardware, so an image of the calculator's own operating system is what it runs, and the README does not document where to obtain one or how it is loaded. Whatever the answer is, it has to come from outside this repository, and you should check the terms under which you obtain it yourself before relying on this emulator.

The fourth is a preference for a different toolchain. Firebird is a qmake project with a hand-maintained Xcode step on iOS, a hand-maintained target list and an emscripten directory. If your requirement is a build that a modern CI system handles without intervention, this is not that project, and the README offers no container or package manager route beyond the openSUSE build service package for one distribution.

## Conclusion

firebird fits a student or teacher who needs the TI-Nspire calculator on a device they already own, and a developer who wants a readable emulator core in C++ with a Qt front end. It does not fit anyone expecting current TI-Nspire hardware support to be complete, since the last release was v1.6 on 2023-03-16 while the repository was pushed to on 2026-06-25. Before adopting it, check the model list against your calculator, and on iOS plan for the manual Xcode step the README describes for translation enabled builds.

## FAQ

### What is Firebird and which calculators does it emulate?

Firebird is the community TI-Nspire emulator, originally created by Goplat. It supports the Nspire Touchpad with CAS, the CX with CAS, and the CX II in its -T and CAS variants, on Android, iOS, Linux, macOS and Windows.

### How do I build Firebird from source?

Install Qt5, then either open firebird.pro in Qt Creator and configure your kits, or run mkdir -p build, cd build, qmake .. and make in a terminal. The project is a qmake project, so the .pro file at the root drives the build.

### Why does the iOS build need manual work?

The README attributes it to a qmake bug that ignores the required .S file when building a translation enabled binary, which is the JIT build enabled with TRANSLATION_ENABLED = true. The workaround is to build in Qt Creator, open the generated .xcodeproj in Xcode and add asmcode_arm.S to the Firebird target.

### What licence does Firebird use?

The work is licensed under the GPLv3, with the exception of the icons from the KDE project, which are excluded from that grant. The LICENSE file at the root of the repository holds the terms.

### When was the last Firebird release?

The tagged releases are v1.6 on 2023-03-16, v1.5 on 2020-03-28 and v1.4 on 2017-11-04. The last push to the repository was on 2026-06-25 and the repository is not archived, so the source tree is newer than the last binary.

## Sources

- [Issues](https://github.com/nspire-emus/firebird/issues)
- [License: GPL-3.0](https://github.com/nspire-emus/firebird/blob/master/LICENSE)
- [nspire-emus/firebird on GitHub](https://github.com/nspire-emus/firebird)
- [README](https://github.com/nspire-emus/firebird/blob/master/README.md)
- [Releases](https://github.com/nspire-emus/firebird/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/nspire-emus-firebird
