H2 is a Java-based relational database management system (RDBMS) that can be used as an embedded database (in-process) or as a network server. It provides a full SQL implementation with support for transactions, MVCC, indexes, views, triggers, stored procedures, and compatibility modes for MySQL, PostgreSQL, Oracle, MSSQL Server, and DB2. The system is accessed via JDBC and includes a web-based console for administration. Architecturally, H2 is a monolith with clear subsystem boundaries: a SQL parser and command layer (org.h2.command), an expression evaluation tree (org.h2.expression), a type system (org.h2.value), a storage engine based on MVStore (org.h2.mvstore) with B-tree and MVCC support, a file system abstraction (org.h2.store.fs) supporting multiple backends (disk, memory, encrypted, split, zip), and a JDBC driver (org.h2.jdbc). It also includes server components for TCP and PostgreSQL protocol, a web console, and JMX management. Key entry points include the JDBC driver (org.h2.Driver), the console tool (org.h2.tools.Console), and the server (org.h2.tools.Server). Data flows through SQL parsing, optimization, execution against the storage engine, and result set generation. External dependencies are minimal (Java standard library, optional ICU4J for collation, optional Lucene for full-text search). The codebase is notable for its clean expression hierarchy, composable file system wrappers, sophisticated caching algorithms (LIRS), and extensive test infrastructure including SQL script-based testing and fault injection. It is actively maintained with a large community.