Simple and easy multithreaded web applications in C https://ari.lt/gh/vessel
Find a file
Arija A. 46d8c0b6bb
misc(temple): remove useless debug print
Signed-off-by: Arija A. <ari@ari.lt>
2025-06-26 15:21:20 +03:00
assets enhance: Make the logo square. 2025-03-29 02:16:16 +02:00
core feat: Implement and change ranges (a..b/c => a:b/c) 2025-06-24 13:17:46 +03:00
doc doc(temple): Fix wording 2025-06-26 15:18:53 +03:00
lab misc: Add "prod ready" socket server 2025-06-14 01:53:23 +03:00
old impl: Tempfiles and ByteStreams 2025-06-14 20:57:28 +03:00
scripts misc(temple): remove useless debug print 2025-06-26 15:21:20 +03:00
tests refact: Reformat project + add prefix to thread.c 2025-06-13 17:58:13 +03:00
web feat: Implement and change ranges (a..b/c => a:b/c) 2025-06-24 13:17:46 +03:00
.clang-format pedantics: Make everything pedantic and add code standards. 2025-04-23 19:29:34 +03:00
.clang-tidy refact: Update macro formats. 2025-06-14 16:20:50 +03:00
.editorconfig pedantics: Make everything pedantic and add code standards. 2025-04-23 19:29:34 +03:00
.gitignore fix: Allow for smaller initial capacity, fix locking. 2025-06-13 23:57:58 +03:00
CODE.md refactor: Use stdbool.h 2025-05-02 17:28:47 +03:00
CONTRIBUTORS.md Update CONTRIBUTORS 2025-05-23 23:43:42 +03:00
LICENSE Add readme and license 2024-09-17 18:17:14 +03:00
Makefile refact: Rename src->core 2025-06-14 02:27:39 +03:00
README.md Update CONTRIBUTORS 2025-05-23 23:43:42 +03:00
vessel_valgrind fix: Allow for smaller initial capacity, fix locking. 2025-06-13 23:57:58 +03:00

Vessel

NOTE: Vessel is in pre-alpha development stage. DO NOT use it anywhere outside of testing and contributing! The API can and WILL change. Kittens will die if you run Vessel in prod!!! Also excuse my activity, school's a lot :')

Simple and easy multithreaded web applications in C

Contributing

Either make a git.ari.lt account and fork the repository, OR e-mail me patches at ari@ari.lt. You will be credited :) (pls do not make 50 contributions just fixing one typo at the time tyy)

Todo

  • Templating
  • Hashmap implementation
    • Thread safety
  • Dynamic array
    • Thread safety
  • Common file format implementation
    • JSON
    • XML
    • Form
    • CSV
  • Buffering (Stream abstraction)
    • Operations
      • Use file descriptor/open
      • Read
        • Readb / readbf
      • Write
        • Writef (formatted write)
      • Flush
      • Stop (stop buffering)
    • Thread safety
  • Abstractions over raw TCP connections
    • Hooks
      • Pre- and post- open
      • Pre- close
    • TLS/SSL (OpenSSL and LibreSSL)
    • Thread safety
  • Abstraction over HTTP server, using TCP abstractions
    • HTTP request parser
      • 1.0
      • 1.1
        • TODO: Implement keep-alive connections.
      • 2
    • HTTP request path parser
      • Path parser
      • Path dynamic template parser
        • TODO: Change the formatting to be inline.
    • HTTP response writer
      • Unchunked
      • Chunked
    • Compression
    • Thread safety
    • HTTP routing, using HTTP abstractions
      • Route parser
      • Hooks
        • Before and after request
        • Not found
        • Bad request
        • Server error
        • Cleanup
      • Thread safety
  • Databases.
    • MySQL/MariaDB client
    • Postgresql
    • Filesystem DB
    • Sqlite
    • LMDB
  • Other protocol abstractions
    • HTTP client
    • Memcached client
  • Optimise
    • Hook resolution
    • Route resolution
    • Caching (etags and file content)
  • Full IPv4 and IPv6 support
    • IPv4
    • IPv6
  • Default rendered pages
    • Server error.
    • Not found.
    • Bad request.
    • No route. (reroute to 404?)
    • Timeout. (504?)
    • No worker. (drop connection?)
  • Documentation, motivation, and philosophy.
  • Developer tooling. (vessel CLI)
    • Automated testing.
    • File server.
    • Building.
    • Reloading and rebuilding.
    • Make a new project.
    • Vessel plugins. (vessel get [git URL]?)
  • Cross-platform (all features working)
    • Linux (Debian, Ubuntu, RHEL, Alpine, NixOS)
    • BSD (FreeBSD, OpenBSD)
    • Windows (10, 11, server)
    • Cygwin (for Windows)
    • MacOS
  • Compatibility wrappers
    • Sleeping
    • Threads (pthreads)
    • Socket syscalls
    • Filesystem syscalls
    • Path formats
    • Endianess fixes
    • Time and time spans

Refactoring

  • Check whether the right types are used everywhere. Fix if not.
  • Check whether all paths free memory without exception, fix possible memory leaks.
  • More and better error checking. Better error reporting through return values. (for example, forms)
  • Code restructuring/cleanup.
  • Automated testing.
  • Make sure invalid input doesn't crash the whole application. More testing. All errors should be reported and handled appropriately.
  • Clean up mem.c
  • Patch up pthread usage to hold the lock for as little as possible without data corruption or loss.
  • Improve the building process by removing Make
  • Improve printf() formatting (PRIu64 for example instead of %ju)
  • Track whether an object was already initialised and don't allow double-init.