db
Version, currently 0.14.028 versions
- 0.15.0latestOct 6, 2026
- 0.14.0Sep 4, 2025
- 0.13.1not indexedJun 1, 2026
- 0.13.0not indexedJun 1, 2026
- 0.12.0not indexedJun 1, 2026
- 0.11.0not indexedJun 1, 2026
- 0.10.1not indexedJun 1, 2026
- 0.10.0not indexedJun 1, 2026
- 0.9.0not indexedJun 1, 2026
- 0.8.0not indexedJun 1, 2026
- 0.7.0not indexedJun 1, 2026
- 0.6.0not indexedJun 1, 2026
- 0.5.1not indexedJun 1, 2026
- 0.5.0not indexedJun 1, 2026
- 0.4.4not indexedJun 1, 2026
- 0.4.3not indexedJun 1, 2026
- 0.4.2not indexedJun 1, 2026
- 0.4.1not indexedJun 1, 2026
- 0.4.0not indexedJun 1, 2026
- 0.3.3not indexedJun 1, 2026
- 0.3.2not indexedJun 1, 2026
- 0.3.1not indexedJun 1, 2026
- 0.3.0not indexedJun 1, 2026
- 0.2.2not indexedJun 1, 2026
- 0.2.1not indexedJun 1, 2026
- 0.2.0not indexedJun 1, 2026
- 0.1.1not indexedJun 1, 2026
- 0.1.0not indexedJun 1, 2026
github.com/crystal-lang/crystal-db
Common db api for crystal
Installation
# Add this to your shard.yml
dependencies:
db:
github: crystal-lang/crystal-db
version: ~> 0.14.0Then run:
shards installshard.yml
- Crystal
>= 1.0.0, < 2.0.0- License
- MIT
- Author
- Brian J. Cardiff
Dependencies
This version declares no dependencies.
README
This README is the one indexed from the repository at its latest ref, not from the tag for this version.
crystal-db
Common db api for crystal. You will need to have a specific driver to access a database.
Installation
If you are creating a shard that will work with any driver, then add crystal-db as a dependency in shard.yml:
dependencies:
db:
github: crystal-lang/crystal-db
If you are creating an application that will work with some specific driver(s), then add them in shard.yml:
dependencies:
sqlite3:
github: crystal-lang/crystal-sqlite3
crystal-db itself will be a nested dependency if drivers are included.
Note: Multiple drivers can be included in the same application.
Documentation
Usage
This shard only provides an abstract database API. In order to use it, a specific driver for the intended database has to be required as well:
The following example uses SQLite where ? indicates the arguments. If PostgreSQL is used $1, $2, etc. should be used. crystal-db does not interpret the statements.
require "db"
require "sqlite3"
DB.open "sqlite3:./file.db" do |db|
# When using the pg driver, use $1, $2, etc. instead of ?
db.exec "create table contacts (name text, age integer)"
db.exec "insert into contacts values (?, ?)", "John Doe", 30
args = [] of DB::Any
args << "Sarah"
args << 33
db.exec "insert into contacts values (?, ?)", args: args
puts "max age:"
puts db.scalar "select max(age) from contacts" # => 33
puts "contacts:"
db.query "select name, age from contacts order by age desc" do |rs|
puts "#{rs.column_name(0)} (#{rs.column_name(1)})"
# => name (age)
rs.each do
puts "#{rs.read(String)} (#{rs.read(Int32)})"
# => Sarah (33)
# => John Doe (30)
end
end
end
Roadmap
Issues not yet addressed:
- [x] Support non prepared statements. #25
- [x] Time data type. (implementation details depends on actual drivers)
- [x] Data type extensibility. Allow each driver to extend the data types allowed.
- [x] Transactions & nested transactions. #27
- [x] Connection pool.
- [x] Logging
- [ ] Direct access to
IOto avoid memory allocation for blobs.
Contributing
- Fork it ( https://github.com/crystal-lang/crystal-db/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
Contributors
- bcardiff Brian J. Cardiff - creator, maintainer
Documentation
Built from the current release. The first visit to a release nobody has asked for starts its build.
Links
This release
- Version
0.14.0- Tagged
- Sep 4, 2025
- Commit
9fff44dd1f61- Crystal
>= 1.0.0, < 2.0.0- Indexed
- yes
Dependents
and 163 more
Repository
github.com/crystal-lang/crystal-db
Metadata
- Created
- Aug 12, 2026
- Updated
- Nov 7, 2026
- Synced
- Nov 7, 2026
- Versions
- 28