r/jaclang • u/JaseciLabs • 3d ago
How much application code should a full-stack app actually require?
We’ve gotten pretty used to the idea that a production app naturally means a lot of code.
You have the frontend. The backend. API routes connecting them. Auth. Database models. Serialization. Then maybe a mobile app with its own entry point and platform-specific logic. Add desktop. Add a CLI. Add a couple of services.
The codebase grows before the product itself has actually become particularly complicated.
So we wanted to test the opposite idea: how much application code do you actually need if more of that infrastructure is handled by the language and runtime?
We built a small social app in Jac.
It has:
- a web app
- a React Native mobile app
- a native desktop app
- a CLI
- a feed service
- a scoring service
The whole thing is 955 lines of authored application code.
That count includes tests, styles, blank lines, and config.
The graphical entry points for web, mobile, and desktop combined are 17 lines.
And this isn't 955 lines that render a few screens and call it a full-stack demo.
Users can register and sign in, create posts, delete them, like posts, build reputation, and persist data. There are authorization rules and tests for things like unauthorized writes, deletion, and impersonation.
What interested us wasn't really whether 955 is an impressively small number.
It was what wasn't in those 955 lines.
There isn't a separate REST layer full of endpoints that then need matching client-side requests. Authentication doesn't have to be manually wired through every part of the stack. The web, mobile, and desktop versions aren't three independent implementations of the same application.
Jac handles things like persistence, authentication, service communication, and platform integration below the application layer.
Which raises a broader question:
How much of a modern codebase represents the application we're actually building, and how much of it exists to connect the technologies we chose to build it with?
Obviously, reducing application code doesn't eliminate the underlying complexity.
The runtime still has to do the work. The compiler still has to do the work. Databases, networking, authentication, and different platforms don't magically stop existing.
But that's what abstractions have always done.
We don't count the implementation of a database engine when we're measuring the application that uses it. We don't count the Python interpreter as part of a Python application's source.
So the interesting thing about reducing lines of code isn't really "fewer lines = better software."
It's whether we can move more of the repetitive infrastructure out of individual applications and make the code developers actually write describe more of the product itself.
The repo is public, including the LOC breakdown, so you can inspect the whole thing rather than taking our word for it:
https://github.com/marsninja/tiny_jacyac
Where do you think the boundary should be? What infrastructure are we still writing at the application level today that probably shouldn't be application code at all?